Przeglądaj źródła

주문서개발중

jsh77b 5 lat temu
rodzic
commit
963672bb10

+ 2 - 0
src/main/java/com/style24/core/biz/dao/TscCustomerDao.java

@@ -117,4 +117,6 @@ public interface TscCustomerDao {
 	 * @since 2021. 03. 08
 	 */
 	int deleteDormantCustomer(Integer custNo);
+
+	void createException();
 }

+ 24 - 0
src/main/java/com/style24/core/biz/dao/TscLookbookDao.java

@@ -82,6 +82,30 @@ public interface TscLookbookDao {
 	 */
 	void deleteLookbookBanner(Integer lookbookSq);
 
+	/**
+	 * 룩북 배너 피커 등록/수정
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	void saveLookbookPicker(LookbookGoods lookbookGoods);
+
+	/**
+	 * 룩북 배너 피커 리스트
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	Collection<LookbookGoods> getLookbookBannerPickerList(Integer lookbookbSq);
+
+	/**
+	 * 룩북 배너 피커 삭제
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	void deleteLookbookPicker(Integer lookbookbSq);
+
 	/**
 	 *  front 영역
 	 */

+ 14 - 8
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -423,6 +423,20 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	Collection<Order> getDelvCpnList(Order order);
+
+	/**
+	 * 결제 취소 정보 생성
+	 * @param param
+	 * @return
+	 */
+	void insertPaymentCancel(Payment param);
+
+	/**
+	 * 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성
+	 * @param param
+	 * @return
+	 */
+	void insertPaymentRollback(Payment param);
 	
 	/**
 	 * 총알배송 가능 시간 체크
@@ -441,14 +455,6 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	int getDailyDeliveryZoneInfo(Order order);
-
-	/**
-	 * 결제 후 롤백 취소 데이터 등록
-	 *
-	 * @param param
-	 * @return
-	 */
-	int insertPaymentForRollback(Payment param);
 	
 	/**
 	 * 1. 주문기본정보 등록

+ 1 - 0
src/main/java/com/style24/core/biz/service/TscCustomerService.java

@@ -162,6 +162,7 @@ public class TscCustomerService {
 	 * @author jsshin
 	 * @since 2021. 03. 08
 	 */
+	@Transactional("shopTxnManager")
 	public boolean saveDormantCustomerRelease(Customer customer) {
 		// 1. 고객정보 이력 생성
 		customerDao.createCustomerHistory(customer);

+ 40 - 27
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -32,9 +32,6 @@ public class TscKakaoPayService {
 	@Autowired
 	private TscMessageByLocale message;
 
-	@Autowired
-	private RestTemplate restTemplate;
-	
 	@Autowired
 	private KakaoPayApi kakaoPayApi;
 
@@ -51,18 +48,21 @@ public class TscKakaoPayService {
 		// API 전송 URL 설정
 		String paymentReadyUrl = env.getProperty("kakao.paymentReadyUrl");
 
+		// Redirect URL 설정
+		String redirectUrl = "http://" + env.getProperty("domain.front") + env.getProperty("kakao.paymentRedirectUrl");
+
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
 		params.add("cid", env.getProperty("kakao.cid"));
 		params.add("partner_order_id", order.getOrdNo()+"");
 		params.add("partner_user_id", order.getCustNo()+"");
 		params.add("item_name", order.getGoodsNm());
-		params.add("quantity", order.getOrdQty()+"");
-		params.add("total_amount", order.getRealOrdAmt()+"");
+		params.add("quantity", order.getOrdGoodsQty()+"");
+		params.add("total_amount", order.getPayAmt()+"");
 		params.add("tax_free_amount", "0");
-		params.add("approval_url", order.getApprovalUrl());
-		params.add("fail_url", order.getFailUrl());
-		params.add("cancel_url", order.getCancelUrl());
+		params.add("approval_url", redirectUrl);
+		params.add("fail_url", redirectUrl);
+		params.add("cancel_url", redirectUrl);
 
 		// 카카오페이 API 전송
 		return kakaoPayApi.kakaoPaymentApi(params, paymentReadyUrl);
@@ -77,23 +77,22 @@ public class TscKakaoPayService {
 	 * @since 2021. 03. 04
 	 */
 	@Transactional("shopTxnManager")
-	public Payment approveKakaoPayment(Order order) {
+	public Payment approveKakaoPayment(Payment payment) {
 		// API 전송 URL 설정
 		String approvePaymentUrl = env.getProperty("kakao.approvePaymentUrl");
 
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
 		params.add("cid", env.getProperty("kakao.cid"));
-		params.add("tid", order.getPgTid());
-		params.add("partner_order_id", order.getOrdNo()+"");
-		params.add("partner_user_id", order.getCustNo()+"");
-		params.add("pg_token", order.getPgToken());
+		params.add("tid", payment.getPgTid());
+		params.add("partner_order_id", payment.getPartnerOrderId());
+		params.add("partner_user_id", payment.getPartnerUserId());
+		params.add("pg_token", payment.getPgToken());
 
 		// 카카오페이 API 전송
 		KakaoPay kakaoPay = kakaoPayApi.kakaoPaymentApi(params, approvePaymentUrl);
 
 		// 카카오페이 API 전송 결과 처리
-		Payment payment = new Payment();
 		int statusCode = kakaoPay.getStatusCode();
 
 		// 승인 성공일때 200
@@ -140,14 +139,14 @@ public class TscKakaoPayService {
 	 * @since 2021. 03. 04
 	 */
 	@Transactional("shopTxnManager")
-	public KakaoPay getKakaoPaymentOrder(Order order) {
+	public KakaoPay getKakaoPaymentOrder(Payment payment) {
 		// API 전송 URL 설정
 		String paymentOrderUrl = env.getProperty("kakao.paymentOrderUrl");
 
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
 		params.add("cid", env.getProperty("kakao.cid"));
-		params.add("tid", order.getPgTid());
+		params.add("tid", payment.getPgTid());
 
 		// 카카오페이 API 전송
 		KakaoPay pay = kakaoPayApi.kakaoPaymentApi(params, paymentOrderUrl);
@@ -164,29 +163,21 @@ public class TscKakaoPayService {
 	 * @since 2021. 03. 05
 	 */
 	@Transactional("shopTxnManager")
-	public Payment cancelKakaoPayment(Order order) {
+	public Payment cancelKakaoPayment(Payment payment) {
 		// API 전송 URL 설정
 		String cancelPaymentUrl = env.getProperty("kakao.cancelPaymentUrl");
 
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
 		params.add("cid", env.getProperty("kakao.cid"));
-		params.add("tid", order.getPgTid());
+		params.add("tid", payment.getPgTid());
+		params.add("cancel_amount", String.valueOf(payment.getPayAmt()));
 		params.add("cancel_tax_free_amount", "0");
 
-		// 전체 취소의 경우 카카오페이에 취소가능금액으로 취소금액 설정
-		if ("Y".equals(order.getAllCanYn())) {
-			KakaoPay orderInfo = getKakaoPaymentOrder(order);
-			params.add("cancel_amount", String.valueOf(orderInfo.getCancel_available_amount().getTotal()));
-		} else {
-			params.add("cancel_amount", String.valueOf(order.getCnclRtnAmt()));
-		}
-
 		// 카카오페이 API 전송
 		KakaoPay kakaoPay = kakaoPayApi.kakaoPaymentApi(params, cancelPaymentUrl);
 
 		// 카카오페이 API 전송 결과 처리
-		Payment payment = new Payment();
 		int statusCode = kakaoPay.getStatusCode();
 
 		// 승인 성공일때 200
@@ -214,4 +205,26 @@ public class TscKakaoPayService {
 		return payment;
 	}
 
+	/**
+	 * 카카오페이 결제 데이터 생성
+	 *
+	 * @param KakaoPay, Order
+	 * @return Payment
+	 * @author card007
+	 * @since 2021. 03. 09
+	 */
+	public Payment setKakaoOrderData(KakaoPay kakaoPay, Order order) {
+		Payment payment = new Payment();
+		payment.setPgTid(kakaoPay.getTid());
+		payment.setPartnerOrderId(String.valueOf(order.getOrdNo()));
+		payment.setPartnerUserId(String.valueOf(order.getCustNo()));
+		payment.setNextRedirectAppUrl(kakaoPay.getNext_redirect_app_url());
+		payment.setNextRedirectMobileUrl(kakaoPay.getNext_redirect_mobile_url());
+		payment.setNextRedirectPcUrl(kakaoPay.getNext_redirect_pc_url());
+		payment.setAndroidAppScheme(kakaoPay.getAndroid_app_scheme());
+		payment.setIosAppScheme(kakaoPay.getIos_app_scheme());
+
+		return payment;
+	}
+
 }

+ 77 - 17
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -108,8 +108,8 @@ public class TscKcpService {
 					// 06-3. 가상계좌 승인 결과 처리 (현금영수증은 입금완료 noti에서 입력)
 					result.setVaNm(c_PayPlus.mf_get_res("va_name"));				// 입금할 계좌 예금주
 					result.setVaNo(c_PayPlus.mf_get_res("account"));				// 입금할 계좌 번호
-					result.setVaBank(c_PayPlus.mf_get_res("bankcode"));			// 입금 은행 코드(공통코드 G940)
-					result.setVaDeadline(c_PayPlus.mf_get_res("vaDate"));		// 가상계좌 입금마감시간
+					result.setVaBank(c_PayPlus.mf_get_res("bank_code"));			// 입금 은행 코드(공통코드 G940)
+					result.setVaDeadline(c_PayPlus.mf_get_res("va_date"));		// 가상계좌 입금마감시간
 					result.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());	// 결제대기
 				} else if ("000010000000".equals(result.getUsePayMethod())) {
 					// 06-4. 휴대폰 승인 결과 처리
@@ -127,10 +127,6 @@ public class TscKcpService {
 			}
 		}
 
-		log.info("CHECK RESPONSE DATA        ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
-		log.info("CHECK RESPONSE RESULT DATA ::::: {}", result.toString());
-		log.info("CHECK RESPONSE PARAM DATA  ::::: {}", param.toString());
-
 		return result;
 	}
 
@@ -172,30 +168,94 @@ public class TscKcpService {
 		return payment;
 	}
 
-	@Transactional("shopTxnManager")
+	/**
+	 * KCP 결제 처리 후 로직 진행 중 에러 발생으로 인한 취소처리
+	 * @param param
+	 * @param request
+	 */
 	public void kcpPayRollBack(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
+		param.setPayGb("E");
+		param.setModType("STSC");
+		param.setModDesc("가맹점 결과 처리 오류 - 가맹점에서 취소 요청");
+		kcpCancel(param, request);
+	}
+
+	/**
+	 * KCP 전체 취소 (pgTid, regNo, updNo 필수)
+	 * @param param
+	 * @param request
+	 */
+	public void kcpPayCancelAll(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+		param.setPayGb("O");
+		param.setModType("STSC");
+		param.setModDesc("가맹점 취소 - 전체 취소");
+		kcpCancel(param, request);
+	}
+
+	/**
+	 * KCP 부분 취소 (pgTid, regNo, updNo, leftAmt:취소 전 잔여금액, partCancelAmt:부분취소금액 필수)
+	 * @param param
+	 * @param request
+	 */
+	public void kcpPayCancelPart(Payment param, HttpServletRequest request) {
+		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+		param.setPayGb("O");
+		param.setModType("STPC");
+		param.setModDesc("가맹점 취소 - 부분 취소");
+		kcpCancel(param, request);
+	}
+
+	@Transactional("shopTxnManager")
+	public void kcpCancel(Payment param, HttpServletRequest request) {
 		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
 
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
+		Payment payment = new Payment();
 
 		c_PayPlus.mf_init( "", env.getProperty("pg.kcp.gw.url"), env.getProperty("pg.kcp.gw.port"), Integer.parseInt(env.getProperty("pg.kcp.tx.mode")), env.getProperty("pg.kcp.log.dir"));
 		c_PayPlus.mf_init_set();
 
 		int mod_data_set_no = c_PayPlus.mf_add_set("mod_data");
-		c_PayPlus.mf_set_us( mod_data_set_no, "tno", param.getPgTid());		// KCP 원거래 거래번호
-		c_PayPlus.mf_set_us( mod_data_set_no, "mod_type", "STSC");		// 전체취소 STSC / 부분취소 STPC
-		c_PayPlus.mf_set_us( mod_data_set_no, "mod_ip", f_get_parm(request.getRemoteAddr())); // 변경 요청자 IP
-		c_PayPlus.mf_set_us( mod_data_set_no, "mod_desc", "가맹점 결과 처리 오류 - 가맹점에서 취소 요청"); // 변경 사유
+		c_PayPlus.mf_set_us(mod_data_set_no, "tno"		, param.getPgTid());					// KCP 원거래 거래번호
+		c_PayPlus.mf_set_us(mod_data_set_no, "mod_type"	, param.getModType());					// 전체취소 STSC / 부분취소 STPC
+		c_PayPlus.mf_set_us(mod_data_set_no, "mod_ip"	, f_get_parm(request.getRemoteAddr()));	// 변경 요청자 IP
+		c_PayPlus.mf_set_us(mod_data_set_no, "mod_desc"	, param.getModDesc());					// 변경 사유
+
+		if("STPC".equals(param.getModType())) {
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_mny", param.getPartCancelAmt() + "");	// 취소요청금액
+			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny", param.getLeftAmt() + "");		// 취소가능잔액
+		}
 
 		param.setTranCd("00200000");
 		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), "", "", env.getProperty("pg.kcp.log.level"), "0");
 
-		param.setResCd(c_PayPlus.m_res_cd);		// 결과 코드
-		param.setResMsg(c_PayPlus.m_res_msg);	// 결과 메시지
-
-		log.info("CHECK CANCEL INFO >> {} ", c_PayPlus.getRecvObj().toString());
+		if("0000".equals(c_PayPlus.m_res_cd)) {
+			payment.setResCd(c_PayPlus.m_res_cd);			// 결과 코드
+			payment.setResMsg(c_PayPlus.m_res_msg);			// 결과 메시지
+			payment.setPgTid(c_PayPlus.mf_get_res("tno"));
+			payment.setPgCpnAmt(-Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));
+			if ("STSC".equals(param.getModType())) {
+				payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("order_no")));			// 전체취소시 return 되는 주문번호
+				payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("amount")));			// 전체 취소는 결제 금액 전체
+			} else {
+				payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("ca_order_id")));			// 부분취소시 return되는 주문번호
+				payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("panc_mod_mny")));		// 부분 취소는 취소된 금액
+			}
 
-		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
-		orderDao.insertPaymentForRollback(param);
+			if ("E".equals(param.getPayGb())) {			// 결제완료 로직 진행 중 에러 발생시
+				param.setPgTid(payment.getPgTid());
+				orderDao.insertPaymentCancel(param);
+			} else {									// 일반 취소 작업
+				payment.setRegNo(param.getRegNo() == null ? 0 : param.getRegNo());
+				payment.setUpdNo(param.getUpdNo() == null ? 0 : param.getUpdNo());
+				payment.setPayGb(param.getPayGb());
+				payment.setPayStat(param.getPayStat());
+				orderDao.insertPaymentCancel(payment);
+			}
+		} else {
+			throw new IllegalArgumentException("결제 취소 실패하였습니다.");
+		}
 	}
 }

+ 34 - 2
src/main/java/com/style24/core/biz/service/TscLookbookService.java

@@ -4,6 +4,7 @@ import java.io.File;
 import java.util.Collection;
 
 import com.style24.persistence.domain.LookbookBanner;
+import com.style24.persistence.domain.LookbookGoods;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -64,8 +65,8 @@ public class TscLookbookService {
 			lookbook.setOrgTnfileNm("/lookbook/thumbnail/" + yearMonth + "/" + newFilename);
 			lookbook.setSysTnfileNm("/lookbook/thumbnail/" + yearMonth + "/" + newFilename);
 		}else{
-			lookbook.setOrgTnfileNm(lookbook.getOrgFileNm());
-			lookbook.setSysTnfileNm(lookbook.getOrgFileNm());
+			lookbook.setOrgTnfileNm(lookbook.getOrgTnfileNm());
+			lookbook.setSysTnfileNm(lookbook.getOrgTnfileNm());
 		}
 
 		lookbookDao.saveLookbook(lookbook);
@@ -159,6 +160,37 @@ public class TscLookbookService {
 		return lookbookDao.getLookbookBannerDetailList(lookbookSq);
 	}
 
+	/**
+	 * 룩북 배너 피커 등록/수정
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	@Transactional("shopTxnManager")
+	public void saveLookbookPicker(LookbookGoods lookbookGoods) {
+		if("U".equals(lookbookGoods.getMode())){
+			lookbookDao.deleteLookbookPicker(lookbookGoods.getLookbookbSq());
+		}
+
+		for(LookbookGoods pickerInfo : lookbookGoods.getPickerList()){
+			pickerInfo.setLookbookbSq(lookbookGoods.getLookbookbSq());
+			pickerInfo.setDelYn(lookbookGoods.getDelYn());
+			pickerInfo.setRegNo(lookbookGoods.getRegNo());
+			pickerInfo.setUpdNo(lookbookGoods.getUpdNo());
+			lookbookDao.saveLookbookPicker(pickerInfo);
+		}
+	}
+
+	/**
+	 * 룩북 배너 피커 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 3. 9
+	 */
+	public Collection<LookbookGoods> getLookbookBannerPickerList(Integer lookbookbSq){
+		return lookbookDao.getLookbookBannerPickerList(lookbookbSq);
+	}
+
 	/**
 	 * front 영역
 	 */

+ 37 - 41
src/main/java/com/style24/core/biz/service/TscNaverPayService.java

@@ -55,17 +55,20 @@ public class TscNaverPayService {
 		// API 전송 URL 설정
 		String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentReadyUrl");
 
+		// Redirect URL 설정
+		String redirectUrl = "http://" + env.getProperty("domain.front") + env.getProperty("naverPay.paymentRedirectUrl");
+
 		// API 파라메터 설정
 		NaverPay naverPay = new NaverPay();
 		naverPay.setModelVersion("2");
 		naverPay.setMerchantUserKey(order.getCustNo());
 		naverPay.setMerchantPayKey(order.getOrdNo());
 		naverPay.setProductName(order.getGoodsNm());
-		naverPay.setProductCount(order.getOrdQty());
-		naverPay.setTotalPayAmount(order.getRealOrdAmt());
-		naverPay.setTaxScopeAmount(order.getRealOrdAmt());
+		naverPay.setProductCount(order.getOrdGoodsQty());
+		naverPay.setTotalPayAmount(order.getPayAmt());
+		naverPay.setTaxScopeAmount(order.getPayAmt());
 		naverPay.setTaxExScopeAmount(0);
-		naverPay.setReturnUrl(order.getReturnUrl());
+		naverPay.setReturnUrl(redirectUrl);
 
 		// 네이버페이 API 전송
 		return naverPayApi.naverPaymentJsonApi(naverPay, paymentReadyUrl);
@@ -80,19 +83,18 @@ public class TscNaverPayService {
 	 * @since 2021. 03. 08
 	 */
 	@Transactional("shopTxnManager")
-	public Payment approveNaverPayment(Order order) {
+	public Payment approveNaverPayment(Payment payment) {
 		// API 전송 URL 설정
-		String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.approvePaymentUrl");
+		String approvePaymentUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.approvePaymentUrl");
 
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-		params.add("paymentId", order.getPgTid());
+		params.add("paymentId", payment.getPgTid());
 
 		// 네이버페이 API 전송
-		NaverPay naverPay = naverPayApi.naverPaymentApi(params, paymentReadyUrl);
+		NaverPay naverPay = naverPayApi.naverPaymentApi(params, approvePaymentUrl);
 
 		// 카카오페이 API 전송 결과 처리
-		Payment payment = new Payment();
 		int statusCode = naverPay.getStatusCode();
 
 		// 승인 성공일때 200
@@ -146,13 +148,13 @@ public class TscNaverPayService {
 	 * @since 2021. 03. 08
 	 */
 	@Transactional("shopTxnManager")
-	public NaverPay getNaverPaymentOrder(Order order) {
+	public NaverPay getNaverPaymentOrder(Payment payment) {
 		// API 전송 URL 설정
 		String paymentOrderUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentOrderUrl");
 
 		// API 파라메터 설정
 		NaverPay naverPay = new NaverPay();
-		naverPay.setPaymentId(order.getPgTid());
+		naverPay.setPaymentId(payment.getPgTid());
 
 		// 기간별 주문 조회 (31일 이내)
 		// naverPay.setStartTime(order.getStartTime());
@@ -174,40 +176,20 @@ public class TscNaverPayService {
 	 * @since 2021. 03. 08
 	 */
 	@Transactional("shopTxnManager")
-	public Payment cancelNaverPayment(Order order) {
+	public Payment cancelNaverPayment(Payment payment) {
 		// API 전송 URL 설정
 		String cancelPaymentUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.cancelPaymentUrl");
 
 		// API 파라메터 설정
 		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-		params.add("paymentId", order.getPgTid());
-		params.add("cancelReason", order.getChgReasonNm());
-
-		// 전체 취소의 경우 네이버페이에 취소가능금액으로 취소금액 설정
-		if ("Y".equals(order.getAllCanYn())) {
-			NaverPay orderInfo = getNaverPaymentOrder(order);
-			
-			int cancelAmount = 0;
-			for (int i = 0; i < orderInfo.getBody().getList().size(); i++) {
-				int amt = 0;
-
-				if ("01".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
-					amt = orderInfo.getBody().getList().get(i).getTotalPayAmount();
-				} else if ("04".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
-					amt = orderInfo.getBody().getList().get(i).getTotalPayAmount() * -1;
-				}
-
-				cancelAmount += amt;
-			}
-			params.add("cancelAmount", String.valueOf(cancelAmount));
-		} else {
-			params.add("cancelAmount", String.valueOf(order.getCnclRtnAmt()));
-		}
-		
+		params.add("paymentId", payment.getPgTid());
+		params.add("cancelReason", payment.getChgReasonNm());
+		params.add("cancelAmount", String.valueOf(payment.getPayAmt()));
+
 		// 취소 요청자 설정
 		String cancelRequester = "2";
-		if (StringUtils.isNotBlank(order.getCancelRequester())) {
-			cancelRequester = order.getCancelRequester();
+		if (StringUtils.isNotBlank(payment.getCancelRequester())) {
+			cancelRequester = payment.getCancelRequester();
 		}
 		params.add("cancelRequester", cancelRequester);
 
@@ -215,15 +197,14 @@ public class TscNaverPayService {
 		NaverPay naverPay = naverPayApi.naverPaymentApi(params, cancelPaymentUrl);
 
 		// 카카오페이 API 전송 결과 처리
-		Payment payment = new Payment();
 		int statusCode = naverPay.getStatusCode();
 
 		// 승인 성공일때 200
 		if (statusCode == 200) {
 			payment.setPgTradeNo(naverPay.getBody().getPayHistId());
 			payment.setPgTid(naverPay.getBody().getPaymentId());
-			payment.setOrdNo(order.getOrdNo());
-			payment.setCustNo(order.getCustNo());
+			payment.setOrdNo(payment.getOrdNo());
+			payment.setCustNo(payment.getCustNo());
 			payment.setNaverMethodType(naverPay.getBody().getPrimaryPayMeans());
 			payment.setPayAmt(naverPay.getBody().getPrimaryPayCancelAmount() + naverPay.getBody().getNpointCancelAmount());
 		}
@@ -233,4 +214,19 @@ public class TscNaverPayService {
 
 		return payment;
 	}
+
+	/**
+	 * 네이버페이 결제 데이터 생성
+	 *
+	 * @param Order
+	 * @return Payment
+	 * @author card007
+	 * @since 2021. 03. 09
+	 */
+	public Payment setNaverOrderData(NaverPay naverPay) {
+		Payment payment = new Payment();
+		payment.setReserveId(naverPay.getBody().getReserveId());
+
+		return payment;
+	}
 }

+ 2 - 1
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -62,12 +62,13 @@ public class TscConstants {
 	// 접촉유형
 	public enum ContactType {
 		PROMOTION("G054_100"),					// 회원-프로모션
-		CONGRATULATIONS("G054_201"),			// 회원-회원가입축하
+		CONGRATULATIONS("G054_201"),				// 회원-회원가입축하
 		CELLPHONE_AUTHENTICATION("G054_202"),	// 회원-휴대전화인증
 		PASSWORD_INFO("G054_203"), 				// 회원-고객비밀번호발송
 		QNA_INFO("G054_204"),					// 회원-1:1문의답변
 		SECESSION_INFO("G054_205"),				// 회원-가입탈퇴안내
 		BASIC_LMS("G054_206"),					// 회원-기본LMS안내발송
+		DORMANT_EXPECTED("G054_207"),			// 회원-휴면계정전환예정
 		ORDER_INFO("G054_301"),					// 주문-주문안내
 		BANK_DEPOSIT_INFO("G054_302"),			// 주문-무통장입금안내
 		SOLDOUT_EXPECTED_INFO("G054_303"),		// 주문-결품예정안내

+ 5 - 1
src/main/java/com/style24/persistence/domain/LookbookGoods.java

@@ -4,6 +4,8 @@ import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
 
+import java.util.Collection;
+
 /**
  * 룩북 상품 도메인
  * @author bin2107
@@ -19,7 +21,9 @@ public class LookbookGoods extends TscBaseDomain {
     private String  goodsCd;        //상품코드
     private int     dispOrd;        //표시순서
     private String  delYn;          //삭제여부
-    
+	private String  mode;           //신규,수정
+
+	Collection<LookbookGoods> pickerList;	//베너 리스트
     
     private String goodsNm;
 	private String goodsFullNm;

+ 2 - 13
src/main/java/com/style24/persistence/domain/Order.java

@@ -528,19 +528,8 @@ public class Order extends TscBaseDomain {
 	private int exchangeCount;
 	private int returnCount;
 
-	// 카카오페이
-	private String approvalUrl;
-	private String failUrl;
-	private String cancelUrl;
-	private String pgToken;
-
-	// 네이버페이
-	private String returnUrl;
-	private String paymentId;
-	private String startTime;
-	private String endTime;
-	private String approvalType;
-	private String cancelRequester;
+	// 카카오페이 & 네이버페이
+	private int ordGoodsQty;
 
 	// 암호화 대상 복호화 처리
 	public String getCustNm() {

+ 76 - 57
src/main/java/com/style24/persistence/domain/Payment.java

@@ -19,70 +19,89 @@ import lombok.Data;
 @Data
 public class Payment extends TscBaseDomain {
 	// TB_PAYMENT
-	private int paySq;				// 결제 일련번호
-	private int ordNo;				// 주문번호
-	private int payAmt;				// 결제금액
-	private int pgCpnAmt;			// PG 쿠폰할인금
-	private int npayPntAmt;			// 네이버페이 포인트 할인금
-	private int ordChgSq;			// 주문변경일련번호
-	private int custNo;				// 고객번호
-	private String payGb;			// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
-	private String payDt;			// 결제일자
-	private String payMeans;		// 결제수단
-	private String pgGb;			// PG구분
-	private String payStat;			// 결제 상태
-	private String pgTid;			// PG TID
-	private String pgTradeNo;		// PG거래번호(승인번호)
-	private String pgShopId;		// PG가맹점ID
-	private String cardType;		// PG 카드 유형 (Y:체크카드, N:신용카드, G:기프트카드) 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
-	private String cardKind;		// 카드종류. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
-	private String cardBank;		// 카드발급은행. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
-	private String cardNm;			// 카드명. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
-	private String cardMips;		// 카드할부개월수. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
-	private String cardPcableYn;	// 부분취소가능여부
-	private String vaNo;			// 가상계좌번호. 결제수단이 "20:무통장입금일" 때 사용
-	private String vaNm;			// 가상계좌예금주명. 결제수단이 "20:무통장입금일" 때 사용
-	private String vaBank;			// 가상계좌은행(공통코드G940). 결제수단이 "20:무통장입금일" 때 사용
-	private String vaDeadline;		// 무통장입금마감일시. 결제수단이 "20:무통장입금일" 때 사용
-	private String telecom;			// 통신사.결제수단이 휴대폰결제인경우만 사용
-	private String escrowYn;		// 에스크로 여부
-	private String cashAuthNo;		// 현금영수증 승인번호
-	private String cashTradeNo;		// 현금영수증 거래번호
+	private int paySq;						// 결제 일련번호
+	private int ordNo;						// 주문번호
+	private int payAmt;						// 결제금액
+	private int pgCpnAmt;					// PG 쿠폰할인금
+	private int npayPntAmt;					// 네이버페이 포인트 할인금
+	private int ordChgSq;					// 주문변경일련번호
+	private int custNo;						// 고객번호
+	private String payGb;					// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+	private String payDt;					// 결제일자
+	private String payMeans;				// 결제수단
+	private String pgGb;					// PG구분
+	private String payStat;					// 결제 상태
+	private String pgTid;					// PG TID
+	private String pgTradeNo;				// PG거래번호(승인번호)
+	private String pgShopId;				// PG가맹점ID
+	private String cardType;				// PG 카드 유형 (Y:체크카드, N:신용카드, G:기프트카드) 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardKind;				// 카드종류. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardBank;				// 카드발급은행. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardNm;					// 카드명. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardMips;				// 카드할부개월수. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardPcableYn;			// 부분취소가능여부
+	private String vaNo;					// 가상계좌번호. 결제수단이 "20:무통장입금일" 때 사용
+	private String vaNm;					// 가상계좌예금주명. 결제수단이 "20:무통장입금일" 때 사용
+	private String vaBank;					// 가상계좌은행(공통코드G940). 결제수단이 "20:무통장입금일" 때 사용
+	private String vaDeadline;				// 무통장입금마감일시. 결제수단이 "20:무통장입금일" 때 사용
+	private String telecom;					// 통신사.결제수단이 휴대폰결제인경우만 사용
+	private String escrowYn;				// 에스크로 여부
+	private String cashAuthNo;				// 현금영수증 승인번호
+	private String cashTradeNo;				// 현금영수증 거래번호
 
 	// KCP
-	private int ordrIdxx;			// 가맹점 주문번호
-	private int goodMny;			// 결제금액
-	private int shopUserId;			// 가맹점 고객 ID (CUST_NO)
-	private int quotaopt;			// 신용카드 최대 할부개월수
-	private Integer vcntExpireTerm;	// 무통장입금 유효기간 설정
-	private String dispTaxYn;		// 현금영수증 노출 여부
-	private String paycoDirect;		// 페이코 직접 호출 변수
-	private String payMthod;		// 페이코 직접 호출 변수
-	private String siteCd;			// 가맹점 상점코드
-	private String siteName;		// 가맹점 명
+	private int ordrIdxx;					// 가맹점 주문번호
+	private int goodMny;					// 결제금액
+	private int shopUserId;					// 가맹점 고객 ID (CUST_NO)
+	private int quotaopt;					// 신용카드 최대 할부개월수
+	private int leftAmt;					// 남은 금액
+	private int partCancelAmt;				// 부분취소금액
+	private Integer vcntExpireTerm;			// 무통장입금 유효기간 설정
+	private String dispTaxYn;				// 현금영수증 노출 여부
+	private String paycoDirect;				// 페이코 직접 호출 변수
+	private String payMthod;				// 페이코 직접 호출 변수
+	private String siteCd;					// 가맹점 상점코드
+	private String siteName;				// 가맹점 명
+	private String modType;					// 취소/부분취소 구분
+	private String modDesc;					// 취소 사유
 	private String moduleType;
 	private String goodExpr;
-	private String buyrName;		// 구매자명
-	private String buyrMail;		// 구매자메일
-	private String buyrTel1;		// 구매자 전화번호
-	private String buyrTel2;		// 구매자 휴대폰번호
-	private String currency;		// 원화/달러 구분
-	private String payMethod;		// 신용카드, 무통장입금, 가상계좌, 휴대폰결제 구분
-	private String goodName;		// 상품명
-	private String reqTx;			// 요청종류 (승인 : pay, 취소, 매입 : mod)
-	private String usePayMethod;	// 신용카드, 무통장입금, 가상계좌, 휴대폰결제 요청 결과
+	private String buyrName;				// 구매자명
+	private String buyrMail;				// 구매자메일
+	private String buyrTel1;				// 구매자 전화번호
+	private String buyrTel2;				// 구매자 휴대폰번호
+	private String currency;				// 원화/달러 구분
+	private String payMethod;				// 신용카드, 무통장입금, 가상계좌, 휴대폰결제 구분
+	private String goodName;				// 상품명
+	private String reqTx;					// 요청종류 (승인 : pay, 취소, 매입 : mod)
+	private String usePayMethod;			// 신용카드, 무통장입금, 가상계좌, 휴대폰결제 요청 결과
 	private String tranCd;
-	private String resCd;			// 결과코드
-	private String resMsg;			// 결과메세지
+	private String resCd;					// 결과코드
+	private String resMsg;					// 결과메세지
 	
 	// KakaoPay
-	private String kakaoMethodType;	// 결제 수단, CARD 또는 MONEY 중 하나
-	private int kakaoPoint;			// 사용한 포인트 금액
-	private int kakaoDiscount;		// 할인 금액
-	private String createDt;		// 결제 준비 요청 시각
-	private String approveDt;		// 결제 승인 시각
-	private String status;			// 카카오페이 결제 상태
+	private String partnerOrderId;			// 카카오페이 가맹점 주문번호, 최대 100자
+	private String partnerUserId;			// 카카오페이 가맹점 회원 id, 최대 100자
+	private String pgToken;					// 카카오페이 결제승인 요청을 인증하는 토큰
+	private String nextRedirectAppUrl;		// 카카오톡 결제 페이지 Redirect URL (모바일 앱)
+	private String nextRedirectMobileUrl;	// 카카오톡 결제 페이지 Redirect URL (모바일 웹)
+	private String nextRedirectPcUrl;		// 카카오톡 결제 페이지 Redirect URL (PC 웹)
+	private String androidAppScheme;		// 카카오페이 결제 화면으로 이동하는 Android 앱 스킴
+	private String iosAppScheme;			// 카카오페이 결제 화면으로 이동하는 iOS 앱 스킴
+	private String kakaoMethodType;			// 카카오페이 결제 수단, CARD 또는 MONEY 중 하나
+	private int kakaoPoint;					// 카카오페이 사용한 포인트 금액
+	private int kakaoDiscount;				// 카카오페이 할인 금액
+	private String createDt;				// 카카오페이 결제 준비 요청 시각
+	private String approveDt;				// 카카오페이 결제 승인 시각
+	private String status;					// 카카오페이 결제 상태
 	
 	// NaverPay
-	private String naverMethodType;	// 주 결제 수단 (CARD:신용카드, BANK:계좌이체)
+	private String reserveId;				// 네이버페이 결제 예약 ID
+	private String startTime;				// 네이버페이 주문조회 시작일시
+	private String endTime;					// 네이버페이 주문조회 종료일시
+	private String approvalType;			// 네이버페이 주문조회 타입
+	private String cancelRequester;			// 네이버페이 취소 요청자(1: 구매자, 2: 가맹점 관리자)
+	private String chgReasonNm;				// 취소 사유
+	private String naverMethodType;			// 네이버페이 주 결제 수단 (CARD:신용카드, BANK:계좌이체)
+
 }

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

@@ -364,7 +364,7 @@
 		/* TscCustomer.updateDormantCustomerRelease */
 		UPDATE TB_CUSTOMER C
 		INNER JOIN
-		       TB_DORMANT_CUST DC
+		      TB_DORMANT_CUST DC
 		ON     C.CUST_NO = DC.CUST_NO
 		AND    DC.CUST_NO = #{custNo}
 		SET    C.CUST_NM = DC.CUST_NM
@@ -382,7 +382,7 @@
 		     , C.HOME_BASE_ADDR = DC.HOME_BASE_ADDR
 		     , C.HOME_DTL_ADDR = DC.HOME_DTL_ADDR
 		     , C.CUST_STAT = 'G104_10'
-		     , C.UPD_NO = NOW()
+		     , C.UPD_DT = NOW()
 		     , C.UPD_NO = #{updNo}
 	</insert>
 
@@ -394,4 +394,11 @@
 		WHERE CUST_NO = #{custNo}
 	</delete>
 
+	<!--Exception 테스트-->
+	<insert id="createException">
+		/* TscCustomer.createException */
+		INSERT INTO TB_CUSTOMER (CUST_NO)
+		VALUES (NULL)
+	</insert>
+
 </mapper>

+ 58 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscLookbook.xml

@@ -192,6 +192,64 @@
 		WHERE	LOOKBOOK_SQ = #{lookbookSq}
 	</delete>
 
+	<!-- 룩북 배너 피커 저장 -->
+	<insert id="saveLookbookPicker" parameterType="LookbookGoods">
+		/* TscLookbook.saveLookbookPicker */
+		INSERT INTO TB_LOOKBOOK_GOODS (
+			LOOKBOOKB_SQ
+			,GOODS_CD
+			,XLIM
+			,YLIM
+			,DISP_ORD
+			,DEL_YN
+			,REG_NO
+			,REG_DT
+			,UPD_NO
+			,UPD_DT
+		) VALUES (
+			#{lookbookbSq}
+			,#{goodsCd}
+			,#{xlim}
+			,#{ylim}
+			,( SELECT	IFNULL((MAX(DISP_ORD) + 1), 1) AS DISP_ORD
+				 FROM	TB_LOOKBOOK_GOODS ALIAS_FOR_SUBQUERY
+			    WHERE	LOOKBOOKB_SQ = #{lookbookbSq}
+				)
+			,#{delYn}
+			,#{regNo}
+			,NOW()
+			,#{updNo}
+			,NOW()
+		)
+	</insert>
+
+	<!-- 룩북 배너 피커 리스트 -->
+	<select id="getLookbookBannerPickerList" parameterType="LookbookGoods" resultType="LookbookGoods">
+		/* TscLookbook.getLookbookBannerPickerList */
+		SELECT	LOOKBOOKB_SQ
+				 ,GOODS_CD
+				 ,XLIM
+				 ,YLIM
+				 ,DISP_ORD
+				 ,DEL_YN
+				 ,REG_NO
+				 ,REG_DT
+				 ,UPD_NO
+				 ,UPD_DT
+		FROM	TB_LOOKBOOK_GOODS
+		WHERE	1=1
+		AND 	LOOKBOOKB_SQ = #{lookbookbSq}
+		AND 	DEL_YN = 'N'
+		ORDER BY LOOKBOOKB_SQ , DISP_ORD
+	</select>
+
+	<!-- 룩북 배너 피커 삭제 -->
+	<delete id="deleteLookbookPicker" parameterType="Integer">
+		/* TscLookbook.deleteLookbookPicker */
+		DELETE	FROM	TB_LOOKBOOK_GOODS
+		WHERE	LOOKBOOKB_SQ = #{lookbookbSq}
+	</delete>
+
 	<!-- front 영역-->
 	
 	<!-- 룩북 베너 목록 조회 -->

+ 67 - 6
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -1832,8 +1832,8 @@
 		  FROM TB_CUST_POINT CP
 		 WHERE 1=1
 		   AND CP.CUST_NO = #{custNo}
-		   AND CP.EXP_BE_DT <![CDATA[<]]> NOW()
-		   AND CP.EXP_CMP_DT <![CDATA[>=]]> NOW()
+		   AND CP.EXP_BE_DT <![CDATA[>]]> NOW()
+		   AND CP.EXP_CMP_DT IS NULL
 	</select>
 	
 	<!-- 상품권정보 조회 -->
@@ -2158,8 +2158,69 @@
 		</foreach>
 	</insert>
 
-	<insert id="insertPaymentForRollback" parameterType="Payment">
-		/* TscOrder.insertPaymentForRollback : 롤백 취소 데이터 등록 */
+	<!-- 결제 취소 정보 생성 -->
+	<insert id="insertPaymentCancel" parameterType="Payment">
+		/* TscOrder.insertPaymentCancel : 결제 취소 정보 생성 */
+		INSERT INTO TB_PAYMENT (
+			  ORD_NO
+			, PAY_DT
+			, PAY_MEANS
+			, PAY_AMT
+			, PG_CPN_AMT
+			, NPAY_PNT_AMT
+			, PAY_GB
+			, PAY_STAT
+			, PG_GB
+			, PG_TID
+			, PG_SHOP_ID
+			, CARD_TYPE
+			, CARD_KIND
+			, CARD_BANK
+			, CARD_NM
+			, CARD_MIPS
+			, CARD_PCABLE_YN
+			, VA_NO
+			, VA_NM
+			, VA_BANK
+			, VA_DEADLINE
+			, TELECOM
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT )
+		SELECT #{ordNo}
+			 , NOW()
+			 , PAY_MEANS
+			 , #{payAmt}
+			 , #{pgCpnAmt}
+			 , #{npayPntAmt}
+			 , #{payGb}
+			 , #{payStat}
+			 , PG_GB
+			 , #{pgTid}
+			 , PG_SHOP_ID
+			 , CARD_TYPE
+			 , CARD_KIND
+			 , CARD_BANK
+			 , CARD_NM
+			 , CARD_MIPS
+			 , CARD_PCABLE_YN
+			 , VA_NO
+			 , VA_NM
+			 , VA_BANK
+			 , VA_DEADLINE
+			 , TELECOM
+			 , #{regNo}
+			 , NOW()
+			 , #{updNo}
+			 , NOW()
+		FROM   TB_PAYMENT PAY
+		WHERE  PG_TID = #{pgTid}
+	</insert>
+
+	<!-- 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성 -->
+	<insert id="insertPaymentRollback" parameterType="Payment">
+		/* TscOrder.insertPaymentRollback : 결제 데이터 생성 중 에러로 인한 결제 취소 데이터 생성 */
 		INSERT INTO TB_PAYMENT (
 			  ORD_NO
 			, PAY_DT
@@ -2195,7 +2256,7 @@
 			, -#{payAmt}
 			, -#{pgCpnAmt}
 			, -#{npayPntAmt}
-			, 'E'
+			, #{payGb}
 			, #{payStat}
 			, #{pgGb}
 			, #{pgTid}
@@ -2214,7 +2275,7 @@
 			, #{telecom}
 			, #{regNo}
 			, NOW()
-			, #{regNo}
+			, #{updNo}
 			, NOW()
 		)
 	</insert>