Forráskód Böngészése

마이페이지 전체취소 임시 커밋

card007 5 éve
szülő
commit
4fcf7e46d3

+ 143 - 40
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -168,28 +168,25 @@ public class TscOrderChangeService {
 		//userNo = userNo;
 		
 		// 2. 취소요정정보목록
-		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");				// 취소요청 목록
-		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	// 취소환불금액 목록 (주문상세단품 단위)
-		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");							// 취소요청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
 				
 		// 3. 취소신청정보
-		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));			// 주문번호
-		String chgReason 					= mav.getString("chgReason");						// 변경사유
-		String chgMemo 						= mav.getString("chgMemo");							// 변경메모
-		String allCanYnBeforePayment		= mav.getString("allCanYnBeforePayment");			// 무통장입금전 전체취소 여부
-		String isCustomer					= mav.getString("isCustomer");						// 귀책사유 (고객, 회사)
-		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 		// 취소요청 (공톹코드:G680)
-		String reqGbn						= mav.get("reqGbn").toString();						// 신청구분
-		String ordDtlStat;																		// 주문상세상태
-		String chgStat;																			// 주문변경상태
-		
-		if ("Y".equals(allCanYnBeforePayment)) {
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_BEFORE_CANCEL.value();
-			chgStat = TscConstants.OrderChangeStat.PAYMENT_BEFORE_CANCEL.value();
-		} else {
-			ordDtlStat = TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();
-			chgStat = TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();
-		}
+		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));						// 주문번호
+		String chgReason 					= mav.getString("chgReason");									// 변경사유
+		String chgMemo 						= mav.getString("chgMemo");										// 변경메모
+		String allLastCanYn					= mav.getString("allLastCanYn");								// 마지막 취소 여부
+		String isCustomer					= mav.getString("isCustomer");									// 귀책사유 (고객, 회사)
+		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 					// 취소요청 (공톹코드:G680)
+		String reqGbn						= mav.getString("reqGbn");										// 신청구분
+		String ordDtlStat					= TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
+		String chgStat						= TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();	// 주문변경상태
+		String ipAddress					= mav.getString("ipAddress");									// IP주소
+		String pgTid						= mav.getString("pgTid");										// PG거래ID
+		String payMeans						= mav.getString("payMeans");									// 결제수단
+		String pgGb							= mav.getString("pgGb");										// PG구분
+		int pgCancelAmt						= 0;															// PG취소금액
 		
 		// 4. 주문상세단품정보등록,변경 (단품단위)
 		List<Order> cancelOrderDetailList = new ArrayList<>();
@@ -278,6 +275,7 @@ public class TscOrderChangeService {
 					Order vo = cancelOrderRefundList.get(j);
 					vo.setRegNo(userNo);
 					vo.setUpdNo(userNo);
+					int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
 					
 					// 5.3.0 DEVL_FEE_CD 단위로 주문상세 정보 처리
 					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
@@ -298,6 +296,73 @@ public class TscOrderChangeService {
 						if ("cnclComplete".equals(reqGbn) || "cnclReqComplete".equals(reqGbn)) {
 							orderChangeDao.updateOrderDetail(vo);
 						}
+
+						// 5.3.3 사용포인트원복
+						int pntDcAmt = vo.getPntDcAmt();
+						vo.setOccurGb(TscConstants.PointOccurGb.USE_POINT.value());
+
+						for (Order point : orderChangeDao.getCustPointHst(vo)) {
+							while (pntDcAmt > 0) {
+								if (pntDcAmt < point.getPntAmt()) {
+									point.setPntAmt(pntDcAmt);
+									pntDcAmt -= pntDcAmt;
+								} else {
+									pntDcAmt -= point.getPntAmt();
+								}
+
+								point.setOccurGb(TscConstants.PointOccurGb.USE_POINT_CANCEL.value());
+								point.setOccurDtlDesc("포인트사용취소");
+								point.setRegNo(userNo);
+								point.setUpdNo(userNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustPointHstRollback(point);
+								orderChangeDao.updateCustPointRollback(point);
+							}
+						}
+
+						// 5.3.4 적립예정포인트 수정
+						int savePntAmt = vo.getSavePntAmt();
+						vo.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT.value());
+
+						for (Order point : orderChangeDao.getCustPointHst(vo)) {
+							point.setOccurGb(TscConstants.PointOccurGb.EXPECT_POINT_CANCEL.value());
+							point.setOccurDtlDesc("예정포인트적립취소");
+							point.setPayAmt(savePntAmt * -1);
+							point.setRegNo(userNo);
+							point.setUpdNo(userNo);
+
+							// 적립예정포인트 취소 이력 생성
+							orderChangeDao.createCustPointHstRollback(point);
+						}
+
+						// 5.3.5 상품쿠폰원복
+						if (leftQty == 0) {
+							orderChangeDao.updateGoodsCpnRollback(vo);
+						}
+
+						// 5.3.6 사용상품권 원복
+						int gfcdUseAmt = vo.getGfcdUseAmt();
+
+						for (Order giftCard : orderChangeDao.getCustGiftCardHst(vo)) {
+							while (gfcdUseAmt > 0) {
+								if (gfcdUseAmt < giftCard.getGfcdAmt()) {
+									giftCard.setGfcdAmt(gfcdUseAmt);
+									gfcdUseAmt -= gfcdUseAmt;
+								} else {
+									gfcdUseAmt -= giftCard.getGfcdAmt();
+								}
+
+								giftCard.setOccurGb(TscConstants.GiftCardOccurGb.USE_GIFTCARD_CANCEL.value());
+								giftCard.setOccurDtlDesc("상품권사용취소");
+								giftCard.setRegNo(userNo);
+								giftCard.setUpdNo(userNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustGiftCardHstRollback(giftCard);
+								orderChangeDao.updateCustGiftCardRollback(giftCard);
+							}
+						}
 						
 						// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음 주문상세단위로 수정
 						// 5.3 주문변경상세정보 등록
@@ -425,28 +490,66 @@ public class TscOrderChangeService {
 						orderChangeDao.createDeliveryFee(delvFeeOrder);
 					}
 				}
+
+				pgCancelAmt += spanRefundAmt;
+			}
+		}
+
+		// 마지막 취소 시
+		if ("Y".equals(allLastCanYn)) {
+			// 장바구니, 배송비 쿠폰 원복처리
+			Order coupon = new Order();
+			coupon.setOrdNo(ordNo);
+			coupon.setUpdNo(userNo);
+			orderChangeDao.updateCartCpnRollback(coupon);
+			orderChangeDao.updateDeliveryCpnRollback(coupon);
+
+			// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+			Order freegiftOrder = new Order();
+			freegiftOrder.setOrdNo(ordNo);
+			freegiftOrder.setUpdNo(userNo);
+			orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		}
+
+
+
+		// 상품권으로만 결제 시 PG점프
+		if (!TscConstants.PgGb.ISTYLE.value().equals(pgGb)) {
+			if (TscConstants.PgGb.KCP.value().equals(pgGb) || TscConstants.PgGb.PAYCO.value().equals(pgGb)) {
+				Payment kcp = new Payment();
+				kcp.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kcp.setPayGb("O");
+				kcp.setModType("STSC");
+				kcp.setModDesc("가맹점 취소 - 전체 취소");
+				kcp.setIpAddress(ipAddress);
+				kcp.setPgTid(pgTid);
+				kcp.setPayAmt(pgCancelAmt);
+				kcp.setRegNo(userNo);
+				kcp.setUpdNo(userNo);
+				kcpService.kcpCancel(kcp);
+			} else if (TscConstants.PgGb.NAVER.value().equals(pgGb)) {
+				Payment naverPay = new Payment();
+				naverPay.setOrdNo(ordNo);
+				naverPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				naverPay.setPayGb("O");
+				naverPay.setPayMeans(payMeans);
+				naverPay.setChgReasonNm(chgReason);
+				naverPay.setPgTid(pgTid);
+				naverPay.setPayAmt(pgCancelAmt);
+				naverPay.setRegNo(userNo);
+				naverPay.setUpdNo(userNo);
+
+				naverPayService.cancelNaverPayment(naverPay);
+			} else if (TscConstants.PgGb.KAKAO.value().equals(pgGb)) {
+				Payment kakaoPay = new Payment();
+				kakaoPay.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				kakaoPay.setPayGb("O");
+				kakaoPay.setPgTid(pgTid);
+				kakaoPay.setPayAmt(pgCancelAmt);
+
+				kakaoPayService.cancelKakaoPayment(kakaoPay);
 			}
 		}
-		
-		// TODO
-		// 9. 포인트원복 (사용포인트, 주문상세단위)
-		// 예정적립포인트 취소처리
-		
-		// TODO
-		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
-		
-		// TODO
-		// 11. 상품권원복
-		
-		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
-		//Order freegiftOrder = new Order();
-		//freegiftOrder.setOrdNo(ordNo);
-		//freegiftOrder.setUpdNo(userNo);
-		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
-		
-		// TODO
-		// 13. PG 연동
-		// 네이버페이, 카카오페이 취소 시 취소 포인트 금액 TB_PAYMENT에 업데이트 처야함
 		
 		// TODO
 		// 14. 취소 완료 알림톡 발송 에정

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

@@ -329,6 +329,7 @@ public class Order extends TscBaseDomain {
 	private String occurDtlDesc;
 	
 	// 주문상품권
+	private Integer gfcdHstSq;
 	private Integer custGfcdSq;
 	private String gfcdNm;
 	private String gfcdNo;

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

@@ -163,6 +163,7 @@ public class OrderChange extends TscBaseDomain {
 	private int rfDeliveryFee;						// 환불배송비
 	private int rfRealCnclAmt;						// 환불금액(배송비제외)
 	private String pgGb;							// PG구분
+	private String pgTid;							// PG거래ID
 	private String payStat;							// 결제상태
 	private String payMeans;						// 결제수단
 	private String payMeansNm;						// 결제수단명

+ 6 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -769,6 +769,9 @@
 			, RF_PNT_AMT
 			, RF_PRE_PNT_AMT
 			, RF_GFCD_USE_AMT
+			, RF_CNCL_AMT
+			, RF_DELIVERY_FEE
+			, RF_REAL_CNCL_AMT
 			, REG_NO
 			, REG_DT
 		) VALUES (
@@ -787,6 +790,9 @@
 			, #{rfPntAmt}
 			, #{rfPrePntAmt}
 			, #{rfGfcdUseAmt}
+			, #{rfCnclAmt}
+			, #{rfDeliveryFee}
+			, #{rfRealCnclAmt}
 			, #{regNo}
 			, NOW()
 		)