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

마이페이지 부분취소 임시 커밋

card007 5 лет назад
Родитель
Сommit
704d7ffb09
1 измененных файлов с 295 добавлено и 3 удалено
  1. 295 3
      src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

+ 295 - 3
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -152,6 +152,298 @@ public class TscOrderChangeService {
 		
 		
 		return mav;
 		return mav;
 	}
 	}
+
+	/**
+	 * 마이페이지 부분취소 처리
+	 * 
+	 * @param GagaMap
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 04. 19
+	 */
+	@SuppressWarnings("unchecked")
+	@Transactional("shopTxnManager")
+	public GagaMap partialCancel(GagaMap map) {
+		// 1. 취소요청목록 및 정보 설정
+		List<Order> cancelOrderRefundList 	= (List<Order>) map.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
+		List<Order> cancelDelvRefundList 	= (List<Order>) map.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
+		int ordNo 							= map.getInt("ordNo");											// 주문번호
+		int custNo							= map.getInt("custNo");											// 고객번호
+		String chgReason 					= map.getString("chgReason");									// 변경사유
+		String chgMemo 						= map.getString("chgMemo");										// 변경메모
+		String allLastCanYn					= map.getString("allLastCanYn");								// 마지막 취소 여부
+		String isCustomer					= map.getString("isCustomer");									// 귀책사유 (고객, 회사)
+		String ipAddress					= map.getString("ipAddress");									// IP주소
+		String pgTid						= map.getString("pgTid");										// PG거래ID
+		String payMeans						= map.getString("payMeans");									// 결제수단
+		String pgGb							= map.getString("pgGb");										// PG구분
+		String accountNo					= map.getString("accountNo");									// 환불계좌번호
+		String accountNm					= map.getString("accountNm");									// 환불계좌주명
+		String bankCd						= map.getString("bankCd");										// 환불계좌은행코드
+		String chgGb						= TscConstants.OrderChangeGb.CANCEL.value(); 					// 취소요청 (공톹코드:G680)
+		String ordDtlStat					= TscConstants.OrderDetailStat.PAYMENT_AFTER_CANCEL.value();	// 주문상세상태
+		String chgStat						= TscConstants.OrderChangeStat.PAYMENT_AFTER_CANCEL.value();	// 주문변경상태
+		int pgCancelAmt						= 0;															// PG취소금액
+		
+		// 2. 주문상세단품정보등록, 변경 (단품단위)
+		List<Order> cancelOrderDetailList = new ArrayList<>();
+		List<Integer> ordDtlNoList = new ArrayList<>();
+
+		for (Order cancelOrderRefundPo : cancelOrderRefundList) {
+			cancelOrderRefundPo.setOrdDtlStat(ordDtlStat);
+			cancelOrderRefundPo.setRegNo(custNo);
+			cancelOrderRefundPo.setUpdNo(custNo);
+			
+			// 2-1. 취소수량이 존재하면 주문상세단품정보 수정 및 주문상세단품 이력 등록
+			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+				// 2-1-1. 주문상세단품정보 수정
+				orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+				// 2-1-2. 주문상세단품정보 이력 등록
+				orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+			}
+
+			// 2-2. 주문상세단위로 데이터 설정
+			Integer ordDtlNo = cancelOrderRefundPo.getOrdDtlNo();
+			if (!ordDtlNoList.contains(ordDtlNo)) {
+				cancelOrderDetailList.add(cancelOrderRefundPo);
+				ordDtlNoList.add(ordDtlNo);
+			}
+		}
+		
+		// 3. 주문변경정보, 주문정보, 환불정보 (배송정책코드 별)
+		for (Order obj : cancelDelvRefundList) {
+			// 취소금액 있을 시 처리
+			if (obj.getCnclRtnAmt() > 0) {
+				// 3-1. 주문변경정보 생성
+				OrderChange orderChange = new OrderChange();
+				orderChange.setOrdNo(ordNo);
+				orderChange.setChgGb(chgGb);
+				orderChange.setChgReason(chgReason);
+				orderChange.setChgMemo(chgMemo);
+				orderChange.setAddPayCost(0);
+				orderChange.setAddPayAmt(0);
+				orderChange.setRegNo(custNo);
+				orderChange.setUpdNo(custNo);
+
+				orderChangeDao.createOrderChange(orderChange);
+				
+				// 3-2. 주문상세정보 수정
+				for (Order vo : cancelOrderDetailList) {
+					// 배송정책코드 별 주문상세 처리
+					if (obj.getDelvFeeCd().equals(vo.getDelvFeeCd())) {
+						// 주문상세 별 전체취소여부 설정
+						int leftQty = vo.getOrdQty() - vo.getCnclRtnQty() - vo.getOrdCanChgQty();
+						
+						// 3-2-1. 주문상세 이력 등록
+						orderChangeDao.createOrderDetailHstCnclRtn(vo);
+						
+						// 3-2-2. 주문상세정보 수정
+						orderChangeDao.updateOrderDetail(vo);
+
+						// 3-2-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(custNo);
+								point.setUpdNo(custNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustPointHstRollback(point);
+								orderChangeDao.updateCustPointRollback(point);
+							}
+						}
+
+						// 3-2-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(custNo);
+							point.setUpdNo(custNo);
+
+							// 적립예정포인트 취소 이력 생성
+							orderChangeDao.createCustPointHstRollback(point);
+						}
+
+						// 3-2-5. 상품쿠폰원복
+						if (leftQty == 0) {
+							orderChangeDao.updateGoodsCpnRollback(vo);
+						}
+
+						// 3-2-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(custNo);
+								giftCard.setUpdNo(custNo);
+
+								// 포인트 사용 취소 이력 생성 및 포인트 수정
+								orderChangeDao.createCustGiftCardHstRollback(giftCard);
+								orderChangeDao.updateCustGiftCardRollback(giftCard);
+							}
+						}
+						
+						// 3-2-7. 주문변경상세정보 및 이력 등록
+						OrderChange changeDetailPo = new OrderChange();
+						changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+						changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+						changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+						changeDetailPo.setChgStat(chgStat);
+						changeDetailPo.setRegNo(custNo);
+						changeDetailPo.setUpdNo(custNo);
+
+						orderChangeDao.createOrderChangeDetail(changeDetailPo);
+						orderChangeDao.createOrderChangeDetailHst(changeDetailPo);
+					}
+				}
+				
+				// 3-3. 상품재고원복
+				orderChange.setSellGb(TscConstants.SellGb.ORDER_CANCEL.value());
+				orderChangeDao.createSellQty(orderChange);
+				
+				// 3-4. 환불결제정보 등록 (배송정책 별)
+				int spanRealCnclRtnAmt 		= obj.getRealOrdAmt();		// 취소금액합계
+				int sumDeliveryFee 			= obj.getDelvFee();			// 배송비합계
+				int spanRefundAmt			= spanRealCnclRtnAmt + sumDeliveryFee;
+				
+				Order paymentOrder = new Order();
+				paymentOrder.setOrdNo(ordNo);
+				paymentOrder.setPayAmt(spanRefundAmt * -1);
+				paymentOrder.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+				paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				paymentOrder.setRegNo(custNo);
+				paymentOrder.setUpdNo(custNo);
+
+				orderChangeDao.createPayment(paymentOrder);
+				
+				// 3-5. 환불정보 등록
+				Order refundOrder = new Order();
+				refundOrder.setOrdNo(ordNo);
+				refundOrder.setPaySq(paymentOrder.getPaySq());
+				refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				refundOrder.setRefundAmt(spanRefundAmt);
+				refundOrder.setRfCpn1Amt(obj.getCpn1DcAmt());
+				refundOrder.setRfTmtb1Amt(obj.getTmtb1DcAmt());
+				refundOrder.setRfTmtb2Amt(obj.getTmtb2DcAmt());
+				refundOrder.setRfGoodsCpnAmt(obj.getGoodsCpnDcAmt());
+				refundOrder.setRfCartCpnAmt(obj.getCartCpnDcAmt());
+				refundOrder.setRfPntAmt(obj.getPntAmt());
+				refundOrder.setRfPrePntAmt(obj.getPrePntDcAmt());
+				refundOrder.setRfGfcdUseAmt(obj.getGfcdUseAmt());
+				refundOrder.setRfCnclAmt(obj.getRfCnclAmt());
+				refundOrder.setRfDeliveryFee(obj.getRfDeliveryFee());
+				refundOrder.setRfRealCnclAmt(obj.getRfRealCnclAmt());
+				refundOrder.setRaNo(accountNo);
+				refundOrder.setRaNm(accountNm);
+				refundOrder.setRaBank(bankCd);
+				refundOrder.setRegNo(custNo);
+
+				orderChangeDao.createRefund(refundOrder);
+
+				// 3-6. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+				if (obj.getAddDelvFee() > 0) {
+					Order delvFeeOrder = new Order();
+					delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+					delvFeeOrder.setOrdNo(ordNo);
+					delvFeeOrder.setDelvFeeGb(TscConstants.DeliveryFeeGb.ORIGIN_DELIVERY_FEE.value());
+					delvFeeOrder.setDelvFeeCd(obj.getDelvFeeCd());
+					delvFeeOrder.setDelvFee(obj.getAddDelvFee());
+					delvFeeOrder.setRealDelvAmt(obj.getDelvFee());
+					delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+					delvFeeOrder.setSupplyCompCd(obj.getSupplyCompCd());
+					delvFeeOrder.setRegNo(custNo);
+					delvFeeOrder.setUpdNo(custNo);
+
+					orderChangeDao.createDeliveryFee(delvFeeOrder);
+				}
+
+				pgCancelAmt += spanRefundAmt;
+			}
+
+			// 4. 장바구니, 배송비 쿠폰 원복 및 사은품 전체 취소 처리 (마지막 취소 시)
+			if ("Y".equals(allLastCanYn)) {
+				// 4-1. 장바구니, 배송비 쿠폰 원복처리
+				Order coupon = new Order();
+				coupon.setOrdNo(ordNo);
+				coupon.setUpdNo(custNo);
+				orderChangeDao.updateCartCpnRollback(coupon);
+				orderChangeDao.updateDeliveryCpnRollback(coupon);
+
+				// 4-2. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+				Order freegiftOrder = new Order();
+				freegiftOrder.setOrdNo(ordNo);
+				freegiftOrder.setUpdNo(custNo);
+				orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+			}
+
+
+
+			// 5. PG 결제 취소 처리 (상품권으로만 결제 시 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(custNo);
+					kcp.setUpdNo(custNo);
+					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(custNo);
+					naverPay.setUpdNo(custNo);
+
+					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);
+				}
+		}
+		
+		
+		return map;
+	}
+
 	
 	
 	/**
 	/**
 	 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
 	 * 취소완료 (admin, front, batch(soldout), batch(gift), batch(napy), batch(extmall))
@@ -163,15 +455,15 @@ public class TscOrderChangeService {
 	@SuppressWarnings("unchecked")
 	@SuppressWarnings("unchecked")
 	@Transactional("shopTxnManager")
 	@Transactional("shopTxnManager")
 	public GagaMap cnclComplete(GagaMap mav, int userNo) {
 	public GagaMap cnclComplete(GagaMap mav, int userNo) {
-		
+
 		// 1. 세션회원조회
 		// 1. 세션회원조회
 		//userNo = userNo;
 		//userNo = userNo;
-		
+
 		// 2. 취소요정정보목록
 		// 2. 취소요정정보목록
 		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");							// 취소요청 목록
 		List<Order> cancelReqList		 	= (List<Order>) mav.get("cnclRtnList");							// 취소요청 목록
 		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
 		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");				// 취소환불금액 목록 (주문상세단품 단위)
 		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
 		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");				// 취소환불배송금액 목록 (DELV_FEE_CD 단위)
-				
+
 		// 3. 취소신청정보
 		// 3. 취소신청정보
 		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));						// 주문번호
 		int ordNo 							= Integer.parseInt(mav.getString("ordNo"));						// 주문번호
 		String chgReason 					= mav.getString("chgReason");									// 변경사유
 		String chgReason 					= mav.getString("chgReason");									// 변경사유