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

Merge branch 'develop' into bin2107

김지철 5 лет назад
Родитель
Сommit
1316eb358b
28 измененных файлов с 622 добавлено и 184 удалено
  1. 37 0
      src/main/java/com/style24/front/biz/dao/TsfReviewDao.java
  2. 151 3
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  3. 20 3
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  4. 3 2
      src/main/java/com/style24/front/biz/web/TsfDeliveryController.java
  5. 31 1
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 19 0
      src/main/java/com/style24/front/biz/web/TsfNoMemberController.java
  7. 1 0
      src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java
  8. 11 0
      src/main/java/com/style24/persistence/domain/Review.java
  9. 189 90
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  10. 1 1
      src/main/resources/config/application-tsit.yml
  11. 13 13
      src/main/webapp/WEB-INF/views/mob/SigninFormMob.html
  12. 11 2
      src/main/webapp/WEB-INF/views/mob/customer/DormantCertifyFormMob.html
  13. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/IdFindFormMob.html
  14. 1 2
      src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html
  15. 1 0
      src/main/webapp/WEB-INF/views/mob/customer/NiceIpinFormMob.html
  16. 16 8
      src/main/webapp/WEB-INF/views/mob/customer/NonCustOrderConfirmFormMob.html
  17. 1 1
      src/main/webapp/WEB-INF/views/mob/customer/PasswordFindFormMob.html
  18. 12 4
      src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html
  19. 5 5
      src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html
  20. 12 15
      src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html
  21. 1 1
      src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html
  22. 4 0
      src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html
  23. 10 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html
  24. 56 15
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  25. 0 1
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html
  26. 4 6
      src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html
  27. 4 5
      src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html
  28. 7 4
      src/main/webapp/ux/style24_link.js

+ 37 - 0
src/main/java/com/style24/front/biz/dao/TsfReviewDao.java

@@ -4,6 +4,7 @@ import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -106,6 +107,15 @@ public interface TsfReviewDao {
 	 */
 	void saveMypageReview(Review review);
 	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	void updateMypageReview(Review review);
+	
 	/**
 	 * 마이페이지 작성한 리뷰 건수
 	 * @param review
@@ -187,6 +197,33 @@ public interface TsfReviewDao {
 	 */
 	void saveReviewAttach(ReviewAttach reviewAttach);
 	
+	/**
+	 * 리뷰 포인트 지급 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	int getReviewPointGiveCount(Review review);
+	
+	
+	/**
+	 * 리뷰 포인트 생성
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	void createReviewPoint(Point point);
+	
+	/**
+	 * 리뷰 포인트 이력 생성
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	void createReviewPointHst(Point point);
 	
 	
 	

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

@@ -12,10 +12,14 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.gagaframework.web.util.GagaDateUtil;
 import com.gagaframework.web.util.GagaFileUtil;
+import com.style24.core.biz.dao.TscPointDao;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfReviewDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Plan;
+import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -34,8 +38,15 @@ public class TsfReviewService {
 	@Autowired
 	private TsfReviewDao reviewDao;
 	
+	@Autowired
+	private TscPointDao pointDao;
+	
+	
 	@Autowired
 	private Environment env;
+	
+	@Autowired
+	private TscEnvsetService envsetService;
 
 	/**
 	 * 상품 리뷰 목록 건수
@@ -162,12 +173,19 @@ public class TsfReviewService {
 		review.setDispYn("Y");
 		review.setDelYn("N");
 		review.setRegNo(TsfSession.getInfo().getCustNo());
-		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		review.setUpdNo(TsfSession.getInfo().getCustNo());
+		if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
+			review.setPntGiveStat("G043_30");
+		}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+			review.setPntGiveStat("G043_30");
+		}else {
+			review.setPntGiveStat("G043_10");
+		}
 		reviewDao.saveMypageReview(review);
 		
 		//이미지등록
-		ReviewAttach fileReview = new ReviewAttach();
-		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+		if(review.getOrgFileNmArr() != null) {
+			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
 			fileReview.setReviewSq(review.getReviewSq());
@@ -200,6 +218,125 @@ public class TsfReviewService {
 				ind++;
 			}
 		}
+		
+		if(review.getKufKeyArr() != null) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("M");
+			fileReview.setDelYn("N");
+			String[] fileItemVal1 = review.getKufKeyArr();
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				fileReview.setKufKey(fileItemVal1[j]);
+				reviewDao.saveReviewAttach(fileReview);
+			}
+		}
+		
+		int count = reviewDao.getReviewPointGiveCount(review);
+		// 포인트 지급해 준 적 없을때 만 지급
+		if (count ==  0) {
+			int textReviewPnt = envsetService.getTextReviewPoint(TscConstants.Site.STYLE24.value());
+			int photoReviewPnt = envsetService.getPhotoReviewPoint(TscConstants.Site.STYLE24.value());
+			
+			Point point = new Point();
+			point.setCustNo(TsfSession.getInfo().getCustNo());
+			point.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+			point.setOccurDtlDesc("상품평포인트 지급");
+			point.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+			point.setOrdNo(review.getOrdNo());
+			point.setOrdDtlNo(review.getOrdDtlNo());
+			if (review.getKufKeyArr() == null && review.getOrgFileNmArr() == null) {
+				// 상품평만 적었을 경우
+				point.setGvPntAmt(textReviewPnt);
+				point.setRmPntAmt(textReviewPnt);
+				reviewDao.createReviewPoint(point);
+				point.setPntAmt(textReviewPnt);
+				point.setReviewSq(review.getReviewSq());
+				reviewDao.createReviewPointHst(point);
+			}else if(review.getKufKeyArr() == null && review.getOrgFileNmArr() != null) {
+				// 상품평 + 사진
+				point.setCustNo(TsfSession.getInfo().getCustNo());
+				point.setGvPntAmt(photoReviewPnt);
+				point.setRmPntAmt(photoReviewPnt);
+				reviewDao.createReviewPoint(point);
+				point.setPntAmt(photoReviewPnt);
+				point.setReviewSq(review.getReviewSq());
+				reviewDao.createReviewPointHst(point);
+			}
+			
+		}
+	}
+	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 3. 25
+	 */
+	public void updateMypageReview(Review review) {
+		review.setRegNo(TsfSession.getInfo().getCustNo());
+		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		reviewDao.updateMypageReview(review);
+		reviewDao.reviewAttachDelete(review);
+		
+		//이미지등록
+		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("I");
+			fileReview.setDelYn("N");
+			//파일아이템 등록
+			String[] fileItemVal1 = review.getOrgFileNmArr();
+			int ind = 1;
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				String imgInd = String.valueOf(ind);
+				if (ind < 10) {
+					imgInd = "0" + imgInd;
+				}
+				if (!fileItemVal1[j].contains("REVIEW_")) {
+					String planUploadPath = env.getProperty("upload.default.target.path");
+					String yearMonth = GagaDateUtil.getToday().substring(0, 6);
+					planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, "/review");
+					File newFile = new File(GagaFileUtil.getConcatenationPath(planUploadPath, fileItemVal1[j]));
+					planUploadPath = GagaFileUtil.getConcatenationPath(planUploadPath, yearMonth);
+					String newFilename = "REVIEW_" + GagaDateUtil.getTodayDateTime() + "_" + imgInd + "." + org.springframework.util.StringUtils.getFilenameExtension(fileItemVal1[j]);
+					File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(planUploadPath, newFilename)));
+					// Rename a file
+					File path = new File(planUploadPath);
+					if (!path.exists()) {
+						path.mkdir();
+					}
+					newFile.renameTo(uniqueFile);
+					fileReview.setOrgFileNm("/review/" + yearMonth + "/" + newFilename);
+					fileReview.setSysFileNm("/review/" + yearMonth + "/" + newFilename);
+					reviewDao.saveReviewAttach(fileReview);
+				}else {
+					fileReview.setOrgFileNm(fileItemVal1[j]);
+					fileReview.setSysFileNm(fileItemVal1[j]);
+					reviewDao.saveReviewAttach(fileReview);
+				}
+				
+				ind++;
+			}
+		}
+		
+		if(!StringUtils.isAllEmpty(review.getKufKeyArr())) {
+			ReviewAttach fileReview = new ReviewAttach();
+			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
+			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
+			fileReview.setReviewSq(review.getReviewSq());
+			fileReview.setFileGb("M");
+			fileReview.setDelYn("N");
+			String[] fileItemVal1 = review.getKufKeyArr();
+			for (int j = 0; j < fileItemVal1.length; j++) {
+				fileReview.setKufKey(fileItemVal1[j]);
+				reviewDao.saveReviewAttach(fileReview);
+			}
+		}
 	}
 	
 	/**
@@ -296,6 +433,17 @@ public class TsfReviewService {
 		reviewDao.reviewCustomerConfirm(review);
 	}
 	
+	/**
+	 * 리뷰 포인트 지급 확인
+	 * @param review
+	 * @return 
+	 * @author sowon
+	 * @since 2021. 4. 28
+	 */
+	
+	public int getReviewPointGiveCount(Review review) {
+		return reviewDao.getReviewPointGiveCount(review);
+	}
 	
 	
 }

+ 20 - 3
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -365,7 +365,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 */
 	@GetMapping("/nice/cellphone/form")
 	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-			, @RequestParam(value = "custParams", required = false) String custParams) {
+										, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyCellPhone();
 
@@ -388,12 +388,14 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 09
 	 */
 	@GetMapping("/nice/ipin/form")
-	public ModelAndView getCertifyNiceIpin(@RequestParam(value = "redirectUrl", required = false) String redirectUrl) {
+	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();
 
 		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
 			mav.addObject("redirectUrl", redirectUrl); // 모바일만 사용
+			mav.addObject("custParams", custParams); // 모바일만 사용
 		}
 
 		mav.addObject("sEncData", result.getString("sEncData"));
@@ -659,15 +661,29 @@ public class TsfCustomerController extends TsfBaseController {
 	/**
 	 * 휴면해제 인증화면
 	 *
+	 * @param sEncData  - 본인인증 후 받는 암호화데이터
+	 * @param authMethod - 인증방법(휴대폰, 아이핀)
+	 * @param custParams  - 아이핀 인증 후 필요한 값 받는 변수
 	 * @return ModelAndView - 가입완료 화면
 	 * @author jsshin
 	 * @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 = "authMethod", required = false) String authMethod
+											, @RequestParam(value = "custParams", required = false) String custParams) {
+
 		ModelAndView mav = new ModelAndView();
 
+		// http 에서는 Same-Site None 설정이 안되므로 아래와 같이 처리
+		if (StringUtils.isNotBlank(custParams)) {
+			TsfSession.setAttribute("custNo", custParams);
+		}
+
+		if (TscConstants.FrontGb.MOB.value().equals(TsfSession.getFrontGb())) {
+			mav.addObject("custNo", TsfSession.getAttribute("custNo"));
+		}
+
 		mav.addObject("sEncData", sEncData);
 		mav.addObject("authMethod", authMethod);
 
@@ -728,6 +744,7 @@ public class TsfCustomerController extends TsfBaseController {
 
 		ModelAndView mav = new ModelAndView();
 
+		// http 에서는 Same-Site None 설정이 안되므로 아래와 같이 처리
 		if (StringUtils.isNotBlank(custParams)) {
 			TsfSession.setAttribute("custNo", custParams);
 		}

+ 3 - 2
src/main/java/com/style24/front/biz/web/TsfDeliveryController.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.util.StreamUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import com.gagaframework.web.parameter.GagaMap;
@@ -46,9 +47,9 @@ public class TsfDeliveryController extends TsfBaseController {
 	 * @author moon
 	 * @since 2021. 04. 13
 	 */
-	@PostMapping(value = "/sweettracker/response" )
+	@RequestMapping(value = "/sweettracker/response" , method=RequestMethod.POST, consumes="application/json")
 	@ResponseBody
-	public String sweetTrackerResponse(SweetTracker  sweetTracker) throws Exception {
+	public String sweetTrackerResponse(@RequestBody SweetTracker  sweetTracker) throws Exception {
 		
 		deliveryService.saveTemp("들어옴");
 		

+ 31 - 1
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1617,6 +1617,10 @@ public class TsfMypageController extends TsfBaseController {
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
 		
 		mav.addObject("reviewStat", review.getReviewStat());
+		if (review.getReviewStat().equals("u")) {
+			// 리뷰 이미지/동영상
+			mav.addObject("alreadyReviewAttach", reviewService.getReviewAttach(review));
+		}
 		review.setReviewExpireDay(eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value()));
 		mav.addObject("reviewInfo", reviewService.getReviewGoodsInfo(review));
 		
@@ -1636,13 +1640,33 @@ public class TsfMypageController extends TsfBaseController {
 	@ResponseBody
 	public GagaMap mypageReviewSave(@RequestBody Review review) {
 
+		GagaMap result = new GagaMap();
+		review.setCustNo(TsfSession.getInfo().getCustNo());
+
+		reviewService.saveMypageReview(review);
+		result.set("status", "200");
+
+		return result;
+	}
+	
+	/**
+	 * 마이페이지 리뷰 업데이트
+	 * @param review
+	 * @return
+	 * @author sowon
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/review/update")
+	@ResponseBody
+	public GagaMap mypageReviewUpdate(@RequestBody Review review) {
+
 		GagaMap result = new GagaMap();
 		review.setCustNo(TsfSession.getInfo().getCustNo());
 		if (reviewService.reviewDeleteConfirm(review).getCount() > 0) {
 			review.setReviewSq(reviewService.reviewDeleteConfirm(review).getReviewSq());
 		}
 
-		reviewService.saveMypageReview(review);
+		reviewService.updateMypageReview(review);
 		result.set("status", "200");
 
 		return result;
@@ -1787,6 +1811,8 @@ public class TsfMypageController extends TsfBaseController {
 		String referer = StringUtils.defaultIfBlank(TsfSession.getHttpServletRequest().getHeader("referer"), "");
 		boolean redirect = false;
 
+		log.info("referer ==>  {}", referer);
+
 		if (StringUtils.isBlank(referer)) {
 			redirect = true;
 		}
@@ -1799,6 +1825,10 @@ public class TsfMypageController extends TsfBaseController {
 			redirect = true;
 		}
 
+		if (referer.contains("/customer/nice/certify/callback")) {
+			redirect = false;
+		}
+
 		if (redirect) {
 			mav.setViewName("redirect:/mypage/customer/confirm/form");
 			return mav;

+ 19 - 0
src/main/java/com/style24/front/biz/web/TsfNoMemberController.java

@@ -253,4 +253,23 @@ public class TsfNoMemberController extends TsfBaseController {
 
 		return result;
 	}
+
+	/**
+	 * 비회원 주문정보 확인
+	 *
+	 * @param order - 주문번호, 주문자명, 휴대폰번호
+	 * @return GagaMap
+	 * @author jsshin
+	 * @since 2021. 04. 28
+	 */
+	@PostMapping("/order/info/validation")
+	@ResponseBody
+	public GagaMap getOrderInfoValidation(@RequestBody Order order) {
+		GagaMap result = new GagaMap();
+		boolean isFind = orderService.getPagingOrdNoListCount(order) > 0;
+		result.setBoolean("isFind", isFind);
+		return result;
+	}
+
+
 }

+ 1 - 0
src/main/java/com/style24/front/support/config/TsfRedisSessionConfig.java

@@ -86,6 +86,7 @@ public class TsfRedisSessionConfig extends AbstractHttpSessionApplicationInitial
 		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 		serializer.setCookiePath("/");
 		serializer.setUseBase64Encoding(false);
+//		serializer.setSameSite("NONE");
 		// TODO : SSL 적용 후 주석 풀고 테스트 해야함 2021-04-13
 		// SSL인증서 적용 시 주석 제거
 //		serializer.setUseSecureCookie(true);

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

@@ -105,12 +105,23 @@ public class Review extends TscBaseDomain {
 	private int nextReviewSq;
 	private int reviewExpireDay;
 	private String kmcKey;
+	
+	private Integer custPntSq;		// 고객포인트일련번호
+	private int gvPntAmt;			// 지급포인트금액
+	private String occurGb;			// 포인트발생구분
+	private String occurDtlDesc;	// 포인트발생상세설명
+	private int pntAmt;				// 포인트금액
+	private String pntUploadStat;	// 포인트반영상태
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] orgFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] sysFileNmArr;
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] kmcKeyArr;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] kufKeyArr;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] itemNmArr;		// 옵션코드
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] optCdArr;		// 옵션코드

+ 189 - 90
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -444,9 +444,6 @@
 				    ON OD.GOODS_CD = G.GOODS_CD
 				 INNER JOIN TB_BRAND B
 				    ON B.BRAND_CD = G.BRAND_CD
-				 LEFT OUTER JOIN TB_REVIEW R
-				    ON R.ORD_NO = OD.ORD_NO
-				   AND R.ORD_DTL_NO = OD.ORD_DTL_NO
 				 LEFT JOIN TB_ITEMKIND I 
 				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
@@ -462,7 +459,7 @@
 		                                   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 R.REVIEW_SQ IS NULL
+				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.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = #{siteCd}
@@ -596,7 +593,7 @@
 		   	         , I.ITEMKIND_CD 
 			         , I.SIZE_GB 
 			         ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS REMAIN_DT -- 남은시간
-			          <!-- <if test="reviewStat == 'u'.toString()"> -->
+			          <if test="reviewStat == 'u'.toString()">
 			         , R.REVIEW_SQ        
 			         , R.REVIEW_GB        
 				     , R.REVIEW_TITLE     
@@ -627,7 +624,7 @@
 				     , R.ADM_RPL          
 				     , R.ADM_RPL_REG_NO   
 				     , R.ADM_RPL_DT   
-				    <!--  </if> -->
+				     </if>
 				  FROM TB_ORDER O
 				 INNER JOIN TB_ORDER_DETAIL OD
 				    ON O.ORD_NO = OD.ORD_NO
@@ -642,11 +639,12 @@
 				    ON B.BRAND_CD = G.BRAND_CD
 				 LEFT JOIN TB_ITEMKIND I 
 				    ON G.ITEMKIND_CD = I.ITEMKIND_CD 
-				 <!-- <if test="reviewStat == 'u'.toString()"> -->
-				 LEFT JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
+				 <if test="reviewStat == 'u'.toString()">
+				 INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-			      <!-- </if>  -->                         
+			                                      AND R.DEL_YN = 'N'
+			      </if>
 				  LEFT OUTER JOIN (SELECT OD.ORD_DTL_NO
 										, SUM(OCD.CHG_QTY) AS ORD_REQ_CHG_QTY
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
@@ -660,14 +658,14 @@
 		                                   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') 
-				<choose>
+			<!-- 	<choose>
 					<when test="reviewStat == 'u'.toString()">
-					AND R.REVIEW_SQ IS NOT NULL
+					AND O.ORD_NO IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</when>
 					<otherwise>
-					AND R.REVIEW_SQ IS NULL
+					AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
 					</otherwise>
-				</choose> 
+				</choose> -->
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = 'G000_10'
@@ -701,67 +699,65 @@
 		SELECT  COUNT(*) AS CNT 
 		FROM
 		(
-		     SELECT O.ORD_NO 
-		           ,O.ORD_NM 
-		           ,O.PAY_DT 
-		           ,O.CUST_NO 
-		           ,OD.ORD_DTL_NO
-		           ,OD.ORD_EXCH_GB 
-		           ,OD.GOODS_CD 
-		           ,OD.REAL_ORD_AMT 
-		           ,OD.SAVE_PNT_AMT 
-		           ,OD.GFCD_USE_AMT 
-		           ,ODI.ORD_DTL_ITEM_SQ 
-		           ,ODI.ITEM_CD 
-		           ,ODI.OPT_CD 
-		           ,ODI.OPT_CD1
-		           ,ODI.OPT_CD2
-		           ,ODI.ITEM_QTY 
-		           ,ODI.ITEM_PRICE
-		           ,G.GOODS_NM 
-		           ,G.MAIN_COLOR_CD
-		           ,B.BRAND_ENM 
-		           ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS DT -- 남은시간
-		     FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
-		                                          AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
-		                     INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
-		                       					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
-		                       	                 AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
-		                     INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
-		                     INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
-		                     LEFT OUTER JOIN TB_REVIEW R  ON R.ORD_NO = OD.ORD_NO
-		                                          AND R.ORD_DTL_NO = OD.ORD_DTL_NO
-		     WHERE 1=1
-		     	AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  -#{reviewExpireDay} DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
-		     	AND O.CUST_NO = #{custNo}
-		     	AND O.DISP_YN = 'Y'
-		     	AND R.REVIEW_SQ IS NULL
-		     	AND O.SITE_CD = #{siteCd}
-		     GROUP BY O.ORD_NO 
-		           ,O.ORD_NM 
-		           ,O.PAY_DT 
-		           ,O.CUST_NO 
-		           ,OD.ORD_DTL_NO
-		           ,OD.ORD_EXCH_GB 
-		           ,OD.GOODS_CD 
-		           ,OD.REAL_ORD_AMT 
-		           ,OD.SAVE_PNT_AMT 
-		           ,OD.GFCD_USE_AMT 
-		           ,ODI.ORD_DTL_ITEM_SQ 
-		           ,ODI.ITEM_CD 
-		           ,ODI.OPT_CD 
-		           ,ODI.OPT_CD1
-		           ,ODI.OPT_CD2
-		           ,ODI.ITEM_QTY 
-		           ,ODI.ITEM_PRICE
-		           ,G.GOODS_NM 
-		           ,G.MAIN_COLOR_CD
-		           ,B.BRAND_ENM 
+			SELECT O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL #{reviewExpireDay} DAY),NOW()) AS DT -- 남은시간
+			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
+								 				 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
+			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
+			                  					 AND OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+			                  	                 AND ODI.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60')
+			                INNER JOIN TB_GOODS G ON G.GOODS_CD = OD.GOODS_CD 
+			                INNER JOIN TB_BRAND B ON B.BRAND_CD = G.BRAND_CD
+			WHERE 1=1
+				AND O.PAY_DT <![CDATA[>]]>  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL  -#{reviewExpireDay} DAY), '%Y%M%D%H%I%S') <!--  60 일이내것만 -->
+				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.CUST_NO = #{custNo}
+				AND O.DISP_YN = 'Y'
+				AND O.SITE_CD = #{siteCd}
+			GROUP BY O.ORD_NO 
+			      ,O.ORD_NM 
+			      ,O.PAY_DT 
+			      ,O.CUST_NO 
+			      ,OD.ORD_DTL_NO
+			      ,OD.ORD_EXCH_GB 
+			      ,OD.GOODS_CD 
+			      ,OD.REAL_ORD_AMT 
+			      ,OD.SAVE_PNT_AMT 
+			      ,OD.GFCD_USE_AMT 
+			      ,ODI.ORD_DTL_ITEM_SQ 
+			      ,ODI.ITEM_CD 
+			      ,ODI.OPT_CD 
+			      ,ODI.OPT_CD1
+			      ,ODI.OPT_CD2
+			      ,ODI.ITEM_QTY 
+			      ,ODI.ITEM_PRICE
+			      ,G.GOODS_NM 
+			      ,G.MAIN_COLOR_CD
+			      ,B.BRAND_ENM 
 		)F
 		ORDER BY F.PAY_DT DESC
 	</select>
 	
-	<select id="saveMypageReview" parameterType="Review" resultType="Review">
+	<insert id="saveMypageReview" parameterType="Review" useGeneratedKeys="true" keyProperty="reviewSq">
 		/* TsfReivew.saveMypageReview */
 		INSERT INTO TB_REVIEW (
 		                         REVIEW_SQ
@@ -780,6 +776,7 @@
 		                       , SCORE_THICK
 		                       , SCORE_WEIGHT
 		                       , SCORE_BALL
+		                       , PNT_GIVE_STAT
 		                       , DISP_YN
 		                       , DEL_YN
 		                       , REG_NO
@@ -804,6 +801,7 @@
 		                        , #{scoreThick}
 		                        , #{scoreWeight}
 		                        , #{scoreBall}
+		                        , #{pntGiveStat}
 		                        , #{dispYn}
 		                        , #{delYn}
 		                        , #{regNo}
@@ -811,21 +809,32 @@
 		                        , #{updNo}
 		                        , now()
 		                      )
-		                      ON DUPLICATE KEY UPDATE
-		                         DEL_YN = 'N'
-		                                     ,REVIEW_CONTENT =  #{reviewContent} 
-		                                     ,SCORE          =  #{score}           
-		                                     ,HEIGHT         =  #{height}          
-		                                     ,WEIGHT         =  #{weight}          
-		                                     ,SCORE_SIZE     =  #{scoreSize}       
-		                                     ,SCORE_COLOR    =  #{scoreColor}      
-		                                     ,SCORE_FIT      =  #{scoreFit}        
-		                                     ,SCORE_THICK    =  #{scoreThick}      
-		                                     ,SCORE_WEIGHT   =  #{scoreWeight}     
-		                                     ,SCORE_BALL     =  #{scoreBall}       
-		                                     ,UPD_DT         =  now()     
-		                                                 
-	</select>
+	</insert>
+	
+	<update id="updateMypageReview" parameterType="Review">
+		/* TsfReivew.updateMypageReview */
+		UPDATE TB_REVIEW
+		SET REVIEW_CONTENT =  #{reviewContent} 
+		   ,SCORE          =  #{score}           
+		   ,HEIGHT         =  #{height}          
+		   ,WEIGHT         =  #{weight}          
+		   ,SCORE_SIZE     =  #{scoreSize}       
+		   ,SCORE_COLOR    =  #{scoreColor}      
+		   ,SCORE_FIT      =  #{scoreFit}        
+		   ,SCORE_THICK    =  #{scoreThick}      
+		   ,SCORE_WEIGHT   =  #{scoreWeight}     
+		   ,SCORE_BALL     =  #{scoreBall}  
+		   , DEL_YN        = 'N'     
+		   ,UPD_DT         =  now()     
+		WHERE REVIEW_SQ  = #{reviewSq}
+		AND   ORD_NO     = #{ordNo}
+		AND   ORD_DTL_NO = #{ordDtlNo}
+		AND   CUST_NO    = #{custNo}
+		AND   GOODS_CD   = #{goodsCd}
+	</update>
+	
+	
+	
 	
 	<select id="getAlreadyReviewCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getAlreadyReviewCount */
@@ -852,7 +861,7 @@
 			      ,G.GOODS_NM 
 			      ,G.MAIN_COLOR_CD
 			      ,B.BRAND_ENM 
-			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 60 DAY),NOW()) AS DT -- 남은시간
+			      ,DATEDIFF( DATE_ADD(O.PAY_DT,INTERVAL 90 DAY),NOW()) AS DT -- 남은시간
 			FROM TB_ORDER O INNER JOIN TB_ORDER_DETAIL OD ON O.ORD_NO = OD.ORD_NO 
 								 				 AND OD.ORD_DTL_STAT IN ('G013_70','G013_50','G013_60') --  구매 확정인것만
 			                INNER JOIN TB_ORDER_DETAIL_ITEM ODI ON OD.ORD_DTL_NO = ODI.ORD_DTL_NO 
@@ -863,11 +872,12 @@
 			                INNER JOIN TB_REVIEW R ON R.ORD_NO = O.ORD_NO 
 			                                      AND R.ORD_NO = O.ORD_NO
 			                                      AND R.ORD_DTL_NO = OD.ORD_DTL_NO
+			           		                      AND R.DEL_YN = 'N'
 			WHERE 1=1
+				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL -90 DAY), '%Y%M%D%H%I%S')
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
-				AND R.DEL_YN = 'N'
-				AND R.DISP_YN = 'Y'
+ 				AND O.SITE_CD = #{siteCd}
 			GROUP BY O.ORD_NO 
 			      ,O.ORD_NM 
 			      ,O.PAY_DT 
@@ -1179,7 +1189,6 @@
 		SET R.DEL_YN = 'Y'
 		WHERE 1=1
  		AND R.REVIEW_SQ = #{reviewSq}
- 		-- AND R.ADM_RPL IS NULL
  		AND R.CUST_NO = #{custNo}
 	</update>
 	
@@ -1197,7 +1206,7 @@
 		FROM TB_REVIEW R
 		WHERE 1=1
 		  AND R.ORD_NO = #{ordNo}
-		  AND R.ORD_DTL_NO =#{ordDtlNo}
+		  AND R.ORD_DTL_NO = #{ordDtlNo}
 		  AND R.DEL_YN ='Y'
 		  AND R.GOODS_CD = #{goodsCd}
 		  AND R.CUST_NO = #{custNo}
@@ -1241,4 +1250,94 @@
 		, CURRENT_TIMESTAMP
 		)
 	</insert>
+	
+	<!-- 포인트 지급 전 확인 -->
+	<select id="getReviewPointGiveCount" parameterType="Review" resultType="int">
+		/* TsfReivew.getReviewPointGiveCount */	
+		SELECT COUNT(*) AS COUNT
+		FROM TB_REVIEW 
+		WHERE CUST_NO = #{custNo}
+		AND DEL_YN = 'Y'
+		AND PNT_GIVE_STAT = 'G043_30'
+		AND ORD_NO        = #{ordNo}
+		AND ORD_DTL_NO    = #{ordDtlNo}
+		AND GOODS_CD      = #{goodsCd}
+	</select>
+	
+	<insert id="createReviewPoint" parameterType="Point" useGeneratedKeys="true" keyProperty="custPntSq">
+		/* TsfReivew.createReviewPoint */
+		INSERT INTO TB_CUST_POINT (
+		       CUST_PNT_SQ
+		     , CUST_NO
+		     , GV_PNT_AMT
+		     , US_PNT_AMT
+		     , RM_PNT_AMT
+		     , EXP_BE_DT
+		     , EXP_CMP_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES (
+		       #{custPntSq}
+		     , #{custNo}
+		     , #{gvPntAmt}
+		     , 0
+		     , #{rmPntAmt}
+		     , DATE_FORMAT(CONCAT(DATE_ADD(CURRENT_DATE, INTERVAL 1 YEAR), ' 23:59:59'), '%Y-%m-%d %H:%i:%S')
+		     , #{expCmpDt}
+		     , #{custNo}
+		     , NOW()
+		     , #{custNo}
+		     , NOW()	
+		     )
+	</insert>
+	
+	<insert id="createReviewPointHst" parameterType="Point">
+		/* TsfReivew.createReviewPoint */
+		INSERT INTO TB_CUST_POINT_HST (
+		       CUST_NO
+		     , OCCUR_GB
+		     , OCCUR_DTL_DESC
+		     , PNT_AMT
+		     , CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , SWITCH_DUE_DT
+		     , PNT_UPLOAD_STAT
+		     , PNT_UPLOAD_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES (
+		       #{custNo}
+		     , #{occurGb}
+		     , #{occurDtlDesc}
+		     , #{pntAmt}
+		     , #{custPntSq}
+		     , #{ordNo}
+		     , #{ordDtlNo}
+		     , #{reviewSq}
+		     <if test='pntUploadStat == "G070_30"'>
+		     , NOW()                                -- SWITCH_DUE_DT
+		     </if>
+		     <if test='pntUploadStat != "G070_30"'>
+		     , DATE_FORMAT(#{switchDueDt}, '%Y%m%d%H%i%S') -- SWITCH_DUE_DT
+		     </if>
+		     , #{pntUploadStat}
+		     <if test='pntUploadStat == "G070_30"'>
+		     , NOW()                                -- PNT_UPLOAD_DT
+		     </if>
+		     <if test='pntUploadStat != "G070_30"'>
+		     , NULL                                 -- PNT_UPLOAD_DT
+		     </if>
+		     , #{custNo}
+		     , NOW()                                -- REG_DT
+		     , #{custNo}
+		     , NOW()                                -- UPD_DT
+		)
+	</insert>
+	
 </mapper>

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

@@ -35,7 +35,7 @@ upload:
         target.path: /TSIT/servers/files/data/style24/Upload/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //tdimage.style24.com/Upload/ProductImage
+        view: //image.istyle24.com/Upload/ProductImage
     image:
         target.path: /TSIT/servers/files/data/style24
         max.size: 10

+ 13 - 13
src/main/webapp/WEB-INF/views/mob/SigninFormMob.html

@@ -45,19 +45,6 @@
 								<input id="chkSaveId" type="checkbox"><label for="chkSaveId"><span>아이디 저장</span></label>
 							</div>
 						</div>
-						<div class="right">
-							<ul>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">회원가입</a>
-								</li>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
-								</li>
-								<li>
-									<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
-								</li>
-							</ul>
-						</div>
 					</div>
 					<div class="help_block">
 						<!-- 보안문자 입력시 -->
@@ -72,6 +59,19 @@
 					<div class="ui_row mt20">
 						<button type="button" class="btn btnL btn_dark" id="btnLogin">로그인</button>
 					</div>
+					<div class="btn_mb_wrap">
+						<ul>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);">회원가입</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_ID_FIND);">아이디찾기</a>
+							</li>
+							<li>
+								<a href="javascript:void(0)" onclick="cfnGoToPage(_PAGE_CUSTOMER_PWD_FIND);">비밀번호 찾기</a>
+							</li>
+						</ul>
+					</div>
 				</form>
 				<div class="t_c sns_wrap">
 					<h3 class="sr-only">간편로그인</h3>

+ 11 - 2
src/main/webapp/WEB-INF/views/mob/customer/DormantCertifyFormMob.html

@@ -42,12 +42,12 @@
 				</div>
 				<div class="btn_group_block ui_row">
 					<div class="ui_col_6">
-						<button type="button" class="btn btn_default" onclick="cfnOpenCellphoneCertify(_PAGE_CUSTOMER_DORMANT);">
+						<button type="button" id="btnCellPhoneCertify" class="btn btn_default">
 							<span><i class="ico ico_phone"></i>휴대폰인증</span>
 						</button>
 					</div>
 					<div class="ui_col_6">
-						<button class="btn btn_default" onclick="cfnOpenIpinCertify(_PAGE_CUSTOMER_DORMANT)">
+						<button type="button" id="btnIpinCertify" class="btn btn_default">
 							<span><i class="ico ico_ipin"></i>아이핀인증</span>
 						</button>
 					</div>
@@ -91,6 +91,15 @@
 		}
 	}
 
+	$('#btnCellPhoneCertify').on('click', function () {
+		cfnOpenCellphoneCertify(_PAGE_CUSTOMER_DORMANT, [[${custNo}]])
+	});
+
+	$('#btnIpinCertify').on('click', function () {
+		cfnOpenIpinCertify(_PAGE_CUSTOMER_DORMANT, [[${custNo}]])
+	});
+
+
 	$(document).ready(function () {
 		if (!gagajf.isNull(sEncData)) {
 			fnNiceCallBack(sEncData, authMethod);

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

@@ -23,7 +23,7 @@
 		<section class="content mb_idInquiry_1">
 			<div class="inner">
 				<div class="close">
-					<a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+					<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_LOGIN);"><span></span><span></span></a>
 				</div>
 			</div>
 			<div class="inner">

+ 1 - 2
src/main/webapp/WEB-INF/views/mob/customer/JoinFormMob.html

@@ -19,7 +19,6 @@
 <body>
 <th:block layout:fragment="content">
 <style>
-	.show{display:block}
 	.hide{display:none}
 </style>
 <main class="container mb">
@@ -27,7 +26,7 @@
 	<section class="content mb_join_2">
 		<div class="inner">
 			<div class="close">
-				<a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+				<a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_CUSTOMER_JOIN_TYPE);"><span></span><span></span></a>
 			</div>
 		</div>
 		<div class="inner">

+ 1 - 0
src/main/webapp/WEB-INF/views/mob/customer/NiceIpinFormMob.html

@@ -20,6 +20,7 @@
 	<input type="hidden" name="m" value="pubmain" />
 	<input type="hidden" name="enc_data" th:value="${sEncData}" />
 	<input type="hidden" name="param_r1" th:value="${redirectUrl}"/>
+	<input type="hidden" name="param_r2" th:value="${custParams}"/>
 </form>
 
 <script th:inline="javascript">

+ 16 - 8
src/main/webapp/WEB-INF/views/mob/customer/NonCustOrderConfirmFormMob.html

@@ -47,7 +47,7 @@
 					</div>
 					<div class="form_field">
 						<label class="input_label sr-only">휴대폰 번호</label>
-						<input type="text" name="ordTelno" placeholder="휴대폰 번호" id="ordTelno" class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+						<input type="text" name="ordPhnno" placeholder="휴대폰 번호" id="ordPhnno" class="form_control" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
 					</div>
 					<div class="form_field">
 						<label class="input_label sr-only">주문번호</label>
@@ -87,13 +87,21 @@
 </main>
 
 <script th:inline="javascript">
-$('#btnNonOrder').on('click', function () {
-	if (!gagajf.validation($('#nonCustOrderForm'))) {
-		return;
-	}
-	mcxDialog.alert("개발중입니다.");
-	// mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.", { //입력정보가 틀릴경우(일치하지 않을경우)
-});
+	$('#btnNonOrder').on('click', function () {
+		if (!gagajf.validation($('#nonCustOrderForm'))) {
+			return;
+		}
+		gagajf.ajaxFormSubmit("/noMember/order/info/validation",'#nonCustOrderForm', fnOrderInfoCallback)
+	});
+
+	var fnOrderInfoCallback = function (result) {
+		if (result.isFind) {
+			$('#nonCustOrderForm').submit();
+		} else {
+			mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.");
+			return;
+		}
+	};
 </script>
 </th:block>
 </body>

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

@@ -23,7 +23,7 @@
         <section class="content mb_idInquiry_1">
             <div class="inner">
                 <div class="close">
-                    <a href="javascript:history.back();" class="btn_close"><span></span><span></span></a>
+                    <a href="javascript:void(0);" class="btn_close" onclick="cfnGoToPage(_PAGE_LOGIN);"><span></span><span></span></a>
                 </div>
             </div>
             <div class="inner">

+ 12 - 4
src/main/webapp/WEB-INF/views/mob/mypage/MypageCustModifyFormMob.html

@@ -212,8 +212,8 @@
 </main>
 <script th:inline="javascript">
 	/*<![CDATA[*/
-	const sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
-	const authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+	let sEncData = [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+	let authMethod = [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
 
 	let orgCustInfo;
 	let orgAccountInfo;
@@ -314,7 +314,7 @@
 	};
 
 	var fnUpdateAuthInfoCallback = function (result) {
-		if (result.iSsuccess) {
+		if (result.isSuccess) {
 			fnGetCustInfo();
 			mcxDialog.alert("본인인증을 통해 정보가 변경 되었습니다.");
 			return;
@@ -356,7 +356,7 @@
 
 	// 수정 버튼
 	$('#btnConfirm').on('click', function () {
-		let custModiFy =  $('#custModiFyForm').serializeObject();
+		let custModiFy = $('#custModiFyForm').serializeObject();
 		let $bankCd = $('#custModiFyForm input[name=bankCd]');
 		let $accountNo = $('#custModiFyForm input[name=accountNo]');
 
@@ -496,6 +496,14 @@
 		cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
 	});
 
+	$('#btnCellCertify').on('click', function () {
+		cfnOpenCellphoneCertify(_PAGE_MYPAGE_CUSTOMER_MODIFY+'?confirmYn=Y');
+	});
+
+	$(".btn_back").on("click", function () {
+		console.log("here");
+		cfnGoToPage(_PAGE_MYPAGE_CUSTOMER);
+	});
 
 	$(document).ready(function(){
 		if (!gagajf.isNull(sEncData)) {

+ 5 - 5
src/main/webapp/WEB-INF/views/web/common/fragments/HeadWeb.html

@@ -49,7 +49,7 @@
 	<link rel="icon" href="/images/favicon-32x32.png" sizes="32x32" type="image/png"/>
 	<link rel="icon" href="/images/favicon-16x16.png" sizes="16x16" type="image/png"/>
 
-	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css">
+	<link rel="stylesheet" type="text/css" href="/ux/pc/css/ion.rangeSlider.min.css"/>
 	<link rel="stylesheet" type="text/css" href="/ux/pc/css/slick.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/swiper.min.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/swiper.min.css"/>
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/jquery-ui.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/jquery-ui.css"/>
@@ -60,10 +60,10 @@
 	<link rel="stylesheet" type="text/css" th:href="@{'/ux/pc/css/main.css?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" href="/ux/pc/css/main.css"/>
 	
 <!-- 	<script src="http://code.jquery.com/jquery-1.9.1.js"></script> -->
-	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
-	<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+	<script src="/ux/pc/js/jquery-1.11.0.min.js"></script>
+	<script src="/ux/pc/js/jquery-migrate-1.2.1.min.js"></script>
+	<script src="/ux/pc/js/swiper.min.js"></script>
+	<script src="/ux/pc/js/ion.rangeSlider.min.js"></script>
 	<script src="/ux/pc/js/jquery.modal.min.js"></script>
 	<script src="/ux/pc/js/slick.min.js"></script>
 	<script src="/ux/pc/js/jquery-ui.js"></script>

+ 12 - 15
src/main/webapp/WEB-INF/views/web/customer/NonCustOrderConfirmFormWeb.html

@@ -26,7 +26,7 @@
 				<h4>비회원 주문 조회</h4>
 			</div>
 			<div class="cont_body">
-				<form id="nonCustOrderForm" class="form_wrap form_col_c form_full" role="form">
+				<form id="nonCustOrderForm" class="form_wrap form_col_c form_full" role="form" action="/noMember/order/list/form" method="post">
 					<div class="form_info">
 						<span class="ico_content_order"></span>
 						<p>
@@ -45,7 +45,7 @@
 						<label class="input_label sr-only">휴대폰 번호</label>
 						<div class="ui_col_12">
 							<div class="input_wrap">
-								<input type="text" name="ordTelno" placeholder="휴대폰 번호" id="ordTelno" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
+								<input type="text" name="ordPhnno" placeholder="휴대폰 번호" id="ordPhnno" minlength="10" maxlength="11" required="required" data-valid-type="numeric" data-valid-name="휴대폰"/>
 							</div>
 						</div>
 					</div>
@@ -87,27 +87,24 @@
 		</div>
 	</div>
 </div>
-<form name="noMemberOrderForm" id="noMemberOrderForm" action="/noMember/order/list/form" method="post">
-	<input type="hidden" name="ordNo" />
-	<input type="hidden" name="ordNm" />
-	<input type="hidden" name="ordPhnno" />
-</form>
 <script th:inline="javascript">
 /*<![CDATA[*/
 	$('#btnNonOrder').on('click', function () {
 		if (!gagajf.validation($('#nonCustOrderForm'))) {
 			return;
 		}
-
-		$('#noMemberOrderForm input[name=ordNo]').val($('#ordNo').val());
-		$('#noMemberOrderForm input[name=ordNm]').val($('#ordNm').val());
-		$('#noMemberOrderForm input[name=ordPhnno]').val($('#ordTelno').val());
-		
-		document.noMemberOrderForm.submit();
-		//mcxDialog.alert("개발중입니다.");
-		// mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.", { //입력정보가 틀릴경우(일치하지 않을경우)
+		gagajf.ajaxFormSubmit("/noMember/order/info/validation",'#nonCustOrderForm', fnOrderInfoCallback)
 	});
 
+	var fnOrderInfoCallback = function (result) {
+		if (result.isFind) {
+			$('#nonCustOrderForm').submit();
+		} else {
+			mcxDialog.alert("입력하신 정보가 정확하지 않습니다. 다시 시도해주세요.");
+			return;
+		}
+	};
+
 /*]]>*/
 </script>
 

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

@@ -18,7 +18,7 @@
  -->
 <body>
 <th:block layout:fragment="content">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
+<script src="/ux/pc/js/ion.rangeSlider.min.js"></script>
 <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
 <div id="container" class="container pd deal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="wrap">

+ 4 - 0
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -1529,6 +1529,10 @@
 					if (minutes < '10') { minutes = '0' + minutes; }
 					if (seconds < '10') { seconds = '0' + seconds; }
 					
+					if (Number(days) > 0 ){
+						hours = Number(hours) + (Number(days) * 24);
+					}
+					
 					$('#d-hours').html(hours);
 					$('#d-minutes').html(minutes);
 					$('#d-seconds').html(seconds);		

+ 10 - 1
src/main/webapp/WEB-INF/views/web/mypage/MypageCustSecedeFormWeb.html

@@ -166,6 +166,8 @@
 		let $leaveIncomplete = $('#leaveIncomplete');
 		let $btnSaveSecede = $('#btnSaveSecede');
 		let $btnConfirm = $('#btnConfirm');
+		let $secedeCustForm = $('#secedeCustForm');
+		let $subH3 = $('.subH3');
 
 		let isPossible = true;
 
@@ -198,33 +200,40 @@
 		$('#secedeCustForm input[name=custId]').val(custIdText);
 
 		if (orderTotal > 0) {
+			$('#ordCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.cancelCount > 0) {
+			$('#cnclCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.returnCount > 0) {
+			$('#rtnCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (orderStatInfo.exchangeCount > 0) {
+			$('#exCnt').addClass('on');
 			isPossible = false
 		}
 
 		if (isPossible) {
+			$subH3.show();
+			$secedeCustForm.show();
 			$btnConfirm.hide();
 			$leaveIncomplete.hide();
 			$btnSaveSecede.show();
 		} else {
+			$subH3.hide();
+			$secedeCustForm.hide();
 			$btnSaveSecede.hide();
 			$leaveIncomplete.show();
 			$btnConfirm.show();
 		}
 
 
-
 	}
 
 	$('#btnSaveSecede').on('click', function () {

+ 56 - 15
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -381,6 +381,8 @@
 <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 button#starBtn');
 var rate = 0;
@@ -514,28 +516,43 @@ var reviewUpdate = function() {
         cancelBtnText: "취소",
         sureBtnText: "확인",
         sureBtnClick: function(){
-        	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnUpdateCallback);
+        	gagajf.ajaxFormSubmit("/mypage/review/update", '#reviewForm', fnUpdateCallback);
         }
     });
 	
 }
 var fnSaveCallback = function (result) {
 	if(result.status == "200"){
-		mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
-			sureBtnText: "확인",
-			sureBtnClick: function() { 
-				//cfnGoToPage(_PAGE_MYPAGE_REVIEW);
-			}
-		});
+		if (document.getElementById("kufKey1")==null && document.getElementById("orgFileNm1")==null) {
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}else{
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 350P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}
+		
+	
 	}
 }
 
 var fnUpdateCallback = function (result) {
 	if(result.status == "200"){
-		//포인트 예정금액 고지해야함
-		//cfnGoToPage(_PAGE_MYPAGE_REVIEW);
-		//$("#alreadyReview").trigger('click');
-		//mcxDialog.alert("상품 리뷰를 수정하였습니다.");
+		if (document.getElementById("kufKey1")==null && document.getElementById("orgFileNm1")==null) {
+			mcxDialog.confirm("상품 리뷰를 수정하였습니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}
 	}
 }
 
@@ -573,9 +590,10 @@ var fnChooseFile = function(obj) {
 						}
 				); 
 		}else if((new RegExp("mp4", "i")).test(file.name)){
-			$(".pics").children().eq(0).append("<input type='hidden' name='kufKey' id='kufKey"+(picLength+1)+"'>");
-			$(".pics").children().eq(0).append("<input type='hidden' name='kmcKey' id='kmcKey"+(picLength+1)+"'>");
-			//gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			setTimeout(function(){
+				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");
+				gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			}, 2000);
 		}else{
 			mcxDialog.alertC('첨부할 수 없는 파일 형식입니다.', {
 				sureBtnText: "확인",
@@ -619,7 +637,7 @@ $(document).ready(function() {
 	}
 	
 	 if(reviewStat=='u'){
-		 var reviewScore = reviewList.score -1;
+		 var reviewScore = reviewList.score-1;
 		 $("#score").val(reviewScore);
 		 rating(reviewScore);
 		$("#reviewForm input[name=height]").val(reviewList.height);
@@ -672,6 +690,29 @@ $(document).ready(function() {
 		}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].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\" src=\"" + _kollusMediaUrl + '/' + attachList[i].kmcKey + "\" />" +
+							"<input type='hidden' name='kufKeyArr' value='" + attachList[i].kmcKey + "'>" + 
+							"<br/><span class=\"removes\">Removes image</span>" +
+							"</span>").insertAfter("#fileAdd");
+				}
+			}
+			$(".removes").click(function(){
+				$(this).parent(".pics").remove();
+			});
+			
+		}
 	} 
 	// 마이페이지 LNB 설정
 	fnSetMypageLnbList(7);

+ 0 - 1
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewFormWeb.html

@@ -322,7 +322,6 @@
 					html+='								<ul>';
 					for (var i = 0; i < attachList.length; i++) {
 						if (attachList[i].reviewSq == item.reviewSq) {
-
 						html+='									<li>';
 						html+='										<a onclick="cfGoodsReviewDetail(\''+item.goodsCd+'\',\'\', \'Y\',\''+item.reviewSq+'\');">';
 						html+='											<div class="pic">';

+ 4 - 6
src/main/webapp/WEB-INF/views/web/planning/PlanningCustGradeBenefitFormWeb.html

@@ -18,7 +18,6 @@
 
 <body>
 <th:block layout:fragment="content">
-	<!--  container -->
 	<div id="container" class="container ev">
 		<div class="breadcrumb">
 			<ul>
@@ -28,7 +27,7 @@
 			</ul>
 		</div>
 		<div class="wrap">
-			<div class="content ev_rank">
+			<div class="content wide ev_rank">
 				<div class="cont_head">
 					<div>
 						<h3>회원등급 혜택</h3>
@@ -125,7 +124,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="content inner ev_benefit_tbl">
+			<div class="content ev_benefit_tbl">
 				<div class="cont_head">
 					<h3>등급 혜택</h3>
 				</div>
@@ -208,8 +207,7 @@
 										<p>10만원 이상 구매 시</p>
 									</td>
 									<td>
-										<div class="cou_img"><img src="/images/pc/ico_coupon_3000.png" alt="15,000원 할인 쿠폰"></div>
-										<p>2만원 이상 구매 시</p>
+
 									</td>
 								</tr>
 								<tr>
@@ -238,7 +236,7 @@
 							</table>
 						</div>
 					</div>
-					<div class="announce_txt inner">
+					<div class="announce_txt">
 						<div class="note_txt">
 							<img src="/images/pc/ico_content_find.png" alt="유의사항">
 							<p>유의사항</p>

+ 4 - 5
src/main/webapp/WEB-INF/views/web/planning/PlanningMainFormWeb.html

@@ -48,14 +48,13 @@
                             <p id="planningTotCnt"><span>0</span>개의 기획전</p>
                         </div>
                     </div>
-					 <div class="list_content nodata" style="display: none;" id="divPlanningNoData"> 
-						<div class="list_defult">
+					 <div class="nodata" style="display: none;" id="divPlanningNoData"> 
+						<div class="txt_box">
 							<div>
-								<img src="/images/pc/ico_content_find.png" alt=""/>
 								<p>등록된 기획전이 없습니다.</p>
 							</div>
-							<div class="ui_row">
-								<button type="button" class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>메인으로 가기</span></button>
+							<div class="btn_box">
+								<button class="btn btn_default" onclick="cfnGoToPage(_PAGE_MAIN);"><span>메인으로 가기</span></button>
 							</div>
 						</div>
 					</div> 

+ 7 - 4
src/main/webapp/ux/style24_link.js

@@ -153,7 +153,6 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
 	if ('P' === _frontGb) {
 		window.open(actionUrl, "popupCellphone", "top=" + popupY + ", left=" + popupX + ", width=" + popupWidth + ", height=" + popupHeight + ", fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbar=no");
 	} else {
-		console.log('redirectUrl', redirectUrl);
 		if (!gagajf.isNull(redirectUrl)) {
 			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
 			if (!gagajf.isNull(custParams)) {
@@ -172,12 +171,12 @@ var cfnOpenCellphoneCertify = function (redirectUrl, custParams) {
  *		 cfnOpenIpinCertify();
  *		 호출된 페이지에서
  *		 PC : fnNiceCallBack(encData) 콜백 함수 생성 후 encData 가지고 호출 처리
- *		 MO :
+ *		 MO : redirectUrl 호출하는 페이지에서 넣어줘야됨
  * </pre>
  * @since  : 2021/02/09
  * @author : jsshin
  */
-var cfnOpenIpinCertify = function (redirectUrl) {
+var cfnOpenIpinCertify = function (redirectUrl, custParams) {
 	var actionUrl = _frontUrl + "/customer/nice/ipin/form";
 	var popupWidth = 445;
 	var popupHeight = 550;
@@ -187,7 +186,11 @@ var cfnOpenIpinCertify = function (redirectUrl) {
 		window.open(actionUrl, "popupIpin", "top=" + popupY + ", left=" + popupX + ", width=" + popupWidth + ", height=" + popupHeight + ", fullscreen=no,menubar=no,status=no,toolbar=no,titlebar=yes,location=no,scrollbar=no");
 	} else {
 		if (!gagajf.isNull(redirectUrl)) {
-			document.location.href = actionUrl + "?redirectUrl=" + redirectUrl;
+			actionUrl = actionUrl + "?redirectUrl=" + redirectUrl;
+			if (!gagajf.isNull(custParams)) {
+				actionUrl = actionUrl + "&custParams=" + custParams;
+			}
+			document.location.href = actionUrl;
 		}
 	}
 };